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