1+ class Program (object ):
2+ def __init__ (self ,name ,ls ):
3+ self .name = name
4+ self .stmts = ls
5+
6+ class Stmt (object ):
7+ pass
8+
9+ class PrintStmt (Stmt ):
10+ def __init__ (self , exp ):
11+ self .exp = exp
12+
13+ class InputStmt (Stmt ):
14+ def __init__ (self , nome ):
15+ self .id = nome
16+
17+ class VarDeclStmt (Stmt ):
18+ def __init__ (self , nome , t ):
19+ self .id = nome
20+ self .type = t
21+
22+ class LetStmt (Stmt ):
23+ def __init__ (self , nome , e ):
24+ self .id = nome
25+ self .exp = e
26+
27+ class BlockStmt (Stmt ):
28+ def __init__ (self , nome , corpo ):
29+ self .name = nome
30+ self .body = corpo
31+
32+ class IfStmt (Stmt ):
33+ def __init__ (self , c , corpo ):
34+ self .cond = c
35+ self .body = corpo
36+
37+ class WhileStmt (Stmt ):
38+ def __init__ (self , c , corpo ):
39+ self .cond = c
40+ self .body = corpo
41+
42+ class Expr (object ):
43+ pass
44+
45+ class IdExpr (Expr ):
46+ def __init__ (self , nome ):
47+ self .id = nome
48+
49+ class StringExpr (Expr ):
50+ def __init__ (self , s ):
51+ self .str = s
52+
53+ class ArithExpr (Expr ):
54+ pass
55+
56+ class SumExpr (ArithExpr ):
57+ def __init__ (self , ladoEsquerdo , ladoDireito ):
58+ self .left = ladoEsquerdo
59+ self .right = ladoDireito
60+
61+ class SubExpr (ArithExpr ):
62+ def __init__ (self , ladoEsquerdo , ladoDireito ):
63+ self .left = ladoEsquerdo
64+ self .right = ladoDireito
65+
66+ class MulExpr (ArithExpr ):
67+ def __init__ (self , ladoEsquerdo , ladoDireito ):
68+ self .left = ladoEsquerdo
69+ self .right = ladoDireito
70+
71+ class DivExpr (ArithExpr ):
72+ def __init__ (self , ladoEsquerdo , ladoDireito ):
73+ self .left = ladoEsquerdo
74+ self .right = ladoDireito
75+
76+ class UnaryPlusExpr (ArithExpr ):
77+ def __init__ (self , e ):
78+ self .exp = e
79+
80+ class UnaryMinusExpr (ArithExpr ):
81+ def __init__ (self , e ):
82+ self .exp = e
83+
84+ class NumExpr (ArithExpr ):
85+ def __init__ (self , valor ):
86+ self .v = valor
87+
88+ class BooleanExpr (Expr ):
89+ pass
90+
91+ class EqualsExpr (BooleanExpr ):# left == right
92+ def __init__ (self , ladoEsquerdo , ladoDireito ):
93+ self .left = ladoEsquerdo
94+ self .right = ladoDireito
95+
96+ class NotEqualsExpr (BooleanExpr ):# left != right
97+ def __init__ (self , ladoEsquerdo , ladoDireito ):
98+ self .left = ladoEsquerdo
99+ self .right = ladoDireito
100+
101+ class GreaterThanEqualsExpr (BooleanExpr ):# left >= right
102+ def __init__ (self , ladoEsquerdo , ladoDireito ):
103+ self .left = ladoEsquerdo
104+ self .right = ladoDireito
105+
106+ class GreaterThanExpr (BooleanExpr ):# left > right
107+ def __init__ (self , ladoEsquerdo , ladoDireito ):
108+ self .left = ladoEsquerdo
109+ self .right = ladoDireito
110+
111+ class LessThanEqualsExpr (BooleanExpr ):# left <= right
112+ def __init__ (self , ladoEsquerdo , ladoDireito ):
113+ self .left = ladoEsquerdo
114+ self .right = ladoDireito
115+
116+ class LessThanExpr (BooleanExpr ):# left < right
117+ def __init__ (self , ladoEsquerdo , ladoDireito ):
118+ self .left = ladoEsquerdo
119+ self .right = ladoDireito
0 commit comments