|
@@ -1,16 +1,38 @@
|
|
|
-Nonterminals expr call_or_var args.
|
|
|
|
|
-Terminals identifier number string '(' ')' ','.
|
|
|
|
|
|
|
+Nonterminals
|
|
|
|
|
+ expr
|
|
|
|
|
+ call_or_var
|
|
|
|
|
+ array
|
|
|
|
|
+ args
|
|
|
|
|
+ arg.
|
|
|
|
|
|
|
|
-Rootsymbol expr.
|
|
|
|
|
|
|
+Terminals
|
|
|
|
|
+ identifier
|
|
|
|
|
+ number
|
|
|
|
|
+ string
|
|
|
|
|
+ '(' ')'
|
|
|
|
|
+ ',' '[' ']'.
|
|
|
|
|
+
|
|
|
|
|
+Rootsymbol
|
|
|
|
|
+ expr.
|
|
|
|
|
|
|
|
%% Grammar Rules
|
|
%% Grammar Rules
|
|
|
-expr -> call_or_var: '$1'.
|
|
|
|
|
|
|
|
|
|
-call_or_var -> identifier '(' args ')' : {call, element(3,'$1'), '$3'}.
|
|
|
|
|
|
|
+%% Root expression: function call or variable
|
|
|
|
|
+expr -> call_or_var : '$1'.
|
|
|
|
|
+
|
|
|
|
|
+%% Function call or variable
|
|
|
|
|
+call_or_var -> identifier '(' args ')' : {call, element(3, '$1'), '$3'}.
|
|
|
call_or_var -> identifier : {var, element(3, '$1')}.
|
|
call_or_var -> identifier : {var, element(3, '$1')}.
|
|
|
-args -> expr : ['$1'].
|
|
|
|
|
-args -> args ',' expr : '$1' ++ ['$3'].
|
|
|
|
|
|
|
|
|
|
-%% Handling direct values and variables within arguments
|
|
|
|
|
-expr -> number : {num, element(3, '$1')}.
|
|
|
|
|
-expr -> string : {str, element(3, '$1')}.
|
|
|
|
|
|
|
+%% Array is like a arg list, but with square brackets
|
|
|
|
|
+array -> '[' args ']' : {array, '$2'}.
|
|
|
|
|
+
|
|
|
|
|
+%% Argument handling
|
|
|
|
|
+args -> arg : ['$1'].
|
|
|
|
|
+args -> args ',' arg : '$1' ++ ['$3'].
|
|
|
|
|
+
|
|
|
|
|
+%% Arguments can be expressions, arrays, numbers, or strings
|
|
|
|
|
+arg -> expr : '$1'.
|
|
|
|
|
+arg -> array : '$1'.
|
|
|
|
|
+arg -> number : {num, element(3, '$1')}.
|
|
|
|
|
+arg -> string : {str, element(3, '$1')}.
|