-
Notifications
You must be signed in to change notification settings - Fork 0
/
syntax.py
36 lines (26 loc) · 871 Bytes
/
syntax.py
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
# ==============================#
# Syntax: Expr := Id | lamda Id. Expr | Expr Expr | let Id = Expr in Expr
class Identifier:
def __init__(self, name: str):
self.name = name
def __str__(self):
return self.name
class LambdaAbs:
def __init__(self, id: Identifier, expr):
self.id = id
self.expr = expr
def __str__(self):
return "(fn {} => {})".format(self.id, self.expr)
class Application:
def __init__(self, expr1, expr2):
self.expr1 = expr1
self.expr2 = expr2
def __str__(self):
return "({} {})".format(self.expr1, self.expr2)
class LetBinding:
def __init__(self, id: Identifier, expr1, expr2):
self.id = id
self.expr1 = expr1
self.expr2 = expr2
def __str__(self):
return "(let {} = {} in {})".format(self.id, self.expr1, self.expr2)