@@ -7,18 +7,16 @@ class BaseNode(ABC):
77 @abstractmethod
88 def line (self ) -> int : ...
99
10- @abstractmethod
11- def have_body (self ) -> bool : ...
1210
11+ class NodeWithBody (BaseNode , ABC ):
12+ _body = []
1313
14- class BellyNode (BaseNode , ABC ):
15- def have_body (self ) -> bool :
16- return True
14+ def push_node_to_body (self , node : BaseNode ):
15+ self ._body .append (node )
1716
1817
19- class ThinNode (BaseNode , ABC ):
20- def have_body (self ) -> bool :
21- return False
18+ class BasicNode (BaseNode , ABC ):
19+ pass
2220
2321
2422class PrintableNode (BaseNode , ABC ):
@@ -30,23 +28,23 @@ def __repr__(self):
3028 return self .__class__ .__name__ + text
3129
3230
33- class VariableNode (ThinNode , PrintableNode ):
31+ class VariableNode (BasicNode , PrintableNode ):
3432 def __init__ (self , identifier : BaseToken ):
3533 self .identifier = identifier
3634
3735 def line (self ) -> int :
3836 return self .identifier .line
3937
4038
41- class ValueNode (ThinNode , PrintableNode ):
39+ class ValueNode (BasicNode , PrintableNode ):
4240 def __init__ (self , value : BaseToken ):
4341 self .value = value
4442
4543 def line (self ) -> int :
4644 return self .value .line
4745
4846
49- class AssignNode (ThinNode , PrintableNode ):
47+ class AssignNode (BasicNode , PrintableNode ):
5048 def __init__ (self ,
5149 identifier : BaseToken ,
5250 value_type : BaseToken = None ,
@@ -59,29 +57,29 @@ def line(self) -> int:
5957 return self .identifier .line
6058
6159
62- class FuncNode (BellyNode , PrintableNode ):
60+ class FuncNode (NodeWithBody , PrintableNode ):
6361 def __init__ (self ,
6462 identifier : BaseToken ,
6563 arguments : list [AssignNode ] = None ,
6664 body : list [BaseNode ] = None ,
6765 return_type : BaseToken = None ):
6866 self .identifier = identifier
6967 self .arguments = arguments or []
70- self .body = body or []
68+ self ._body = body or []
7169 self .return_type = return_type
7270
7371 def line (self ) -> int :
7472 return self .identifier .line
7573
7674
77- class IfNode (BellyNode , PrintableNode ):
75+ class IfNode (NodeWithBody , PrintableNode ):
7876 def __init__ (self ,
7977 condition : list [BaseNode ] = None ,
8078 body : list [BaseNode ] = None ,
8179 elif_cases : list = None ,
8280 else_body : list [BaseNode ] = None ):
8381 self .condition = condition
84- self .body = body or []
82+ self ._body = body or []
8583 self .elif_cases : list [IfNode .__init__ ] = elif_cases
8684 self .else_body = else_body
8785
@@ -91,7 +89,7 @@ def line(self) -> int:
9189 return self .condition [0 ].line
9290
9391
94- class BinOpNode (ThinNode , PrintableNode ):
92+ class BinOpNode (BasicNode , PrintableNode ):
9593 def __init__ (self ,
9694 left_operand : BaseNode = None ,
9795 right_operand : BaseNode = None ,
@@ -116,14 +114,14 @@ def line(self) -> int:
116114# pass
117115
118116
119- class WhileNode (BellyNode , PrintableNode ):
117+ class WhileNode (NodeWithBody , PrintableNode ):
120118 def __init__ (self ,
121119 condition : list [BaseNode ] = None ,
122120 body : list [BaseNode ] = None ,
123121 else_body : list [BaseNode ] = None ):
124122 self .condition = condition
125- self .body = body or []
126123 self .else_body = else_body or []
124+ self ._body = body
127125
128126 def line (self ) -> int :
129127 if not self .condition or len (self .condition ) == 0 :
0 commit comments