feat(variform): support array syntax '[' and ']'
This commit is contained in:
parent
5f26e4ed5e
commit
bfca3ebc71
|
@ -78,6 +78,8 @@ eval({str, Str}, _Bindings) ->
|
|||
str(Str);
|
||||
eval({num, Num}, _Bindings) ->
|
||||
str(Num);
|
||||
eval({array, Args}, Bindings) ->
|
||||
eval(Args, Bindings);
|
||||
eval({call, FuncNameStr, Args}, Bindings) ->
|
||||
{Mod, Fun} = resolve_func_name(FuncNameStr),
|
||||
ok = assert_func_exported(Mod, Fun, length(Args)),
|
||||
|
|
|
@ -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
|
||||
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')}.
|
||||
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')}.
|
||||
|
|
|
@ -6,6 +6,8 @@ DQ_STRING = \"[^\"]*\"
|
|||
NUMBER = [+-]?(\\d+\\.\\d+|[0-9]+)
|
||||
LPAREN = \(
|
||||
RPAREN = \)
|
||||
LBRACKET = \[
|
||||
RBRACKET = \]
|
||||
COMMA = ,
|
||||
WHITESPACE = [\s\t\n]+
|
||||
|
||||
|
@ -18,6 +20,8 @@ Rules.
|
|||
{NUMBER} : {token, {number, TokenLine, TokenChars}}.
|
||||
{LPAREN} : {token, {'(', TokenLine}}.
|
||||
{RPAREN} : {token, {')', TokenLine}}.
|
||||
{LBRACKET} : {token, {'[', TokenLine}}.
|
||||
{RBRACKET} : {token, {']', TokenLine}}.
|
||||
{COMMA} : {token, {',', TokenLine}}.
|
||||
|
||||
Erlang code.
|
||||
|
|
Loading…
Reference in New Issue