-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathast_types.py
114 lines (78 loc) · 1.45 KB
/
ast_types.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from typing import TypedDict, Literal
class Term(TypedDict):
kind: Literal[
'Int',
'Str',
'Call',
'Binary',
'Function',
'Let',
'If',
'Print',
'First',
'Second',
'Bool',
'Tuple',
'Var'
]
class Loc(TypedDict):
start: int
end: int
filename: str
class Parameter(TypedDict):
text: str
location: Loc
class File(TypedDict):
name: str
expression: Term
location: Loc
class If(Term):
condition: Term
then: Term
otherwise: Term
location: Loc
class Let(Term):
name: Parameter
value: Term
next: Term
location: Loc
class Str(Term):
value: str
location: Loc
class Bool(Term):
value: bool
location: Loc
class Int(Term):
value: int
location: Loc
BinaryOp = Literal[
'Add', 'Sub', 'Mul', 'Div', 'Rem', 'Eq', 'Neq', 'Lt', 'Gt', 'Lte', 'Gte', 'And', 'Or'
]
class Binary(Term):
lhs: Term
op: BinaryOp
rhs: Term
location: Loc
class Call(Term):
callee: Term
arguments: list[Term]
location: Loc
class Function(Term):
parameters: list[Parameter]
value: Term
location: Loc
class Print(Term):
value: Term
location: Loc
class First(Term):
value: Term
location: Loc
class Second(First):
pass
class Tuple(Term):
first: Term
second: Term
location: Loc
class Var(Term):
text: str
location: Loc