-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathparser.py
More file actions
36 lines (27 loc) · 730 Bytes
/
parser.py
File metadata and controls
36 lines (27 loc) · 730 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/python
import ply.yacc as yacc
from terms import Variable as Variable
from terms import Application as Application
from terms import Abstraction as Abstraction
# GRAMMAR SPECIFICATION
# Program ::= Term
#
# Term ::= "(" Term ")"
# | VARIABLE
# | Term Term
# | '\\' VARIABLE '.' Term
def p_start (p):
''' Program : Term '''
p[0] = p[1]
def p_paren (p):
''' Term : '(' Term ')' '''
p[0] = p[2]
def p_variable (p):
''' Term : VARIABLE '''
p[0] = Variable (p[1])
def p_application (p):
''' Term : Term Term '''
p[0] = Application (p[1], p[2])
def p_abstraction (p):
''' Term : BACKSLASH VARIABLE '.' Term '''
p[0] = Abstraction (Variable (p[2]), p[4])