8
8
# -----------------------------------------------------------------------------
9
9
10
10
11
- class Base :
11
+ class BaseNode :
12
12
def __init__ (self ):
13
13
pass
14
14
@@ -22,22 +22,22 @@ def __str__(self):
22
22
return str (self .to_tuple ())
23
23
24
24
25
- class Program ( Base ):
25
+ class ProgramNode ( BaseNode ):
26
26
NODE_NAME = "PROGRAM"
27
27
28
28
def __init__ (self , classes ):
29
- super (Program , self ).__init__ ()
29
+ super (ProgramNode , self ).__init__ ()
30
30
self .classes = classes
31
31
32
32
def to_tuple (self ):
33
33
return tuple ([self .NODE_NAME , self .classes ])
34
34
35
35
36
- class Class ( Base ):
36
+ class ClassNode ( BaseNode ):
37
37
NODE_NAME = "CLASS"
38
38
39
39
def __init__ (self , name , inherits , features ):
40
- super (Class , self ).__init__ ()
40
+ super (ClassNode , self ).__init__ ()
41
41
self .name = name
42
42
self .inherits = inherits
43
43
self .features = features
@@ -46,13 +46,68 @@ def to_tuple(self):
46
46
return tuple ([self .NODE_NAME , self .name , self .inherits , self .features ])
47
47
48
48
49
- class Inheritance ( Base ):
49
+ class InheritanceNode ( BaseNode ):
50
50
NODE_NAME = "INHERITS"
51
51
52
52
def __init__ (self , inheritance_type = None ):
53
- super (Inheritance , self ).__init__ ()
53
+ super (InheritanceNode , self ).__init__ ()
54
54
self .inheritance_type = inheritance_type
55
55
56
56
def to_tuple (self ):
57
57
return tuple ([self .NODE_NAME , self .inheritance_type ])
58
58
59
+ def is_empty (self ):
60
+ return self .inheritance_type is None
61
+
62
+
63
+ class FeaturesNode (BaseNode ):
64
+ NODE_NAME = "FEATURES"
65
+
66
+ def __init__ (self , features ):
67
+ super (FeaturesNode , self ).__init__ ()
68
+ if features is None :
69
+ self .features = tuple ()
70
+ else :
71
+ self .features = features
72
+
73
+ def to_tuple (self ):
74
+ return tuple ([self .NODE_NAME , self .features ])
75
+
76
+ def is_empty (self ):
77
+ return len (self .features ) == 0
78
+
79
+
80
+ class AttributeNode (BaseNode ):
81
+ NODE_NAME = "FORMAL"
82
+
83
+ def __init__ (self , identifier , attr_type , formals , expression ):
84
+ super (AttributeNode , self ).__init__ ()
85
+ self .identifier = identifier
86
+ self .type = attr_type
87
+ self .expression = expression
88
+ self .formals = formals
89
+
90
+ def to_tuple (self ):
91
+ return tuple ([self .NODE_NAME , self .identifier , self .type , self .expression , self .formals ])
92
+
93
+
94
+ class FormalNode (BaseNode ):
95
+ NODE_NAME = "FORMAL"
96
+
97
+ def __init__ (self , identifier , formal_type , assignment ):
98
+ super (FormalNode , self ).__init__ ()
99
+ self .identifier = identifier
100
+ self .type = formal_type
101
+ self .assignment = assignment
102
+
103
+ def to_tuple (self ):
104
+ return tuple ([self .NODE_NAME , self .identifier , self .type , self .assignment ])
105
+
106
+
107
+ class Expr (BaseNode ):
108
+ NODE_NAME = "EXPRESSION"
109
+
110
+ def __init__ (self , expression ):
111
+ super (Expr , self ).__init__ ()
112
+ self .expression = expression
113
+
0 commit comments