diff --git a/lambdaparser.py b/lambdaparser.py index 9100602beb04b2b3bfe73e394620eae22c2bcf5d..64139ef57b40ae6068274eccd9ea7563865a2cb6 100644 --- a/lambdaparser.py +++ b/lambdaparser.py @@ -1,2 +1,42 @@ from ply.lex import lex -from ply.yacc import yacc \ No newline at end of file +from ply.yacc import yacc +from main import Variable, Abstraction, Application + +#BNF Grammar voor lambda calculus +#TERM ::= VARIABLE +# |LAMBDA VARIABLE PERIOD TERM +# |LPAREN TERM TERM RPAREN + +#Tokens importen van de lexer +from lambdalexer import tokens + +def p_paren(p): + ''' TERM : LPAREN TERM RPAREN ''' + p[0] = p[2] + +def p_variable(p): + ''' TERM : VARIABLE ''' + p[0] = Variable(p[1]) + +def p_abstraction(p): + ''' TERM : LAMBDA VARIABLE PERIOD TERM ''' + p[0] = Abstraction(Variable(p[2]),p[4]) + +def p_application(p): + ''' TERM : TERM TERM ''' + p[0] = Application(p[1],p[2]) + +def p_error(p): + print("Syntax error in input!") + + #Build the parser +parser = yacc.yacc() + +while True: + try: + s = input('calc > ') + except EOFError: + break + if not s: continue + result = parser.parse(s) + print(result) \ No newline at end of file