@@ -14,6 +14,7 @@ class ScadTypes(Enum):
1414 FUNCTION = 2
1515 USE = 3
1616 INCLUDE = 4
17+ PARAMETER = 5
1718
1819class ScadObject :
1920 def __init__ (self , scadType ):
@@ -37,17 +38,31 @@ def __init__(self, name):
3738 super ().__init__ (ScadTypes .GLOBAL_VAR )
3839 self .name = name
3940
40- class ScadModule (ScadObject ):
41- def __init__ (self , name , parameters ):
42- super ().__init__ (ScadTypes . MODULE )
41+ class ScadCallable (ScadObject ):
42+ def __init__ (self , name , parameters , scadType ):
43+ super ().__init__ (scadType )
4344 self .name = name
4445 self .parameters = parameters
4546
46- class ScadFunction (ScadObject ):
47+ def __repr__ (self ):
48+ return f'{ self .name } ({ self .parameters } )'
49+
50+ class ScadModule (ScadCallable ):
51+ def __init__ (self , name , parameters ):
52+ super ().__init__ (name , parameters , ScadTypes .MODULE )
53+
54+ class ScadFunction (ScadCallable ):
4755 def __init__ (self , name , parameters ):
48- super ().__init__ (ScadTypes .FUNCTION )
56+ super ().__init__ (name , parameters , ScadTypes .FUNCTION )
57+
58+ class ScadParameter (ScadObject ):
59+ def __init__ (self , name , optional = False ):
60+ super ().__init__ (ScadTypes .PARAMETER )
4961 self .name = name
50- self .parameters = parameters
62+ self .optional = optional
63+
64+ def __repr__ (self ):
65+ return self .name + "=..." if self .optional else self .name
5166
5267precedence = (
5368 ('nonassoc' , "THEN" ),
@@ -202,7 +217,7 @@ def p_parameter_list(p):
202217def p_parameter (p ):
203218 '''parameter : ID
204219 | ID "=" expression'''
205- p [0 ] = p [1 ]
220+ p [0 ] = ScadParameter ( p [1 ], len ( p ) == 4 )
206221
207222def p_function (p ):
208223 '''function : FUNCTION ID "(" opt_parameter_list ")" "=" expression
@@ -269,11 +284,11 @@ def parseFileAndPrintGlobals(scadFile):
269284
270285 print ("Modules:" )
271286 for m in modules :
272- print (f' { m . name } ( { m . parameters } ) ' )
287+ print (f' { m } ' )
273288
274289 print ("Functions:" )
275290 for m in functions :
276- print (f' { m . name } ( { m . parameters } ) ' )
291+ print (f' { m } ' )
277292
278293 print ("Global Vars:" )
279294 for m in globalVars :
0 commit comments