From a3de540f2e22e4ce06a0040fc2ff32ebb4552e38 Mon Sep 17 00:00:00 2001 From: Stijn Pellenkoft <s.a.pellenkoft@students.uu.nl> Date: Sun, 15 Jan 2023 13:25:15 +0100 Subject: [PATCH] Parser voor lambda-calculus --- lambdaparser.py | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/lambdaparser.py b/lambdaparser.py index 9100602..64139ef 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 -- GitLab