feat(variform): add a variable transformer
This commit is contained in:
parent
a9ce4d7645
commit
9bf65a415b
|
@ -76,3 +76,5 @@ rebar-git-cache.tar
|
|||
.docker_image_tag
|
||||
.emqx_docker_image_tags
|
||||
.git/
|
||||
apps/emqx/src/emqx_variform_parser.erl
|
||||
apps/emqx/src/variform/emqx_variform_scan.erl
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
Nonterminals expr call_or_var args.
|
||||
Terminals identifier number string '(' ')' ','.
|
||||
|
||||
Rootsymbol expr.
|
||||
|
||||
%% Grammar Rules
|
||||
expr -> call_or_var: '$1'.
|
||||
|
||||
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')}.
|
|
@ -0,0 +1,26 @@
|
|||
Definitions.
|
||||
%% Define regular expressions for tokens
|
||||
IDENTIFIER = [a-zA-Z][a-zA-Z0-9_.]*
|
||||
SQ_STRING = \'[^\']*\'
|
||||
DQ_STRING = \"[^\"]*\"
|
||||
NUMBER = [+-]?(\\d+\\.\\d+|[0-9]+)
|
||||
LPAREN = \(
|
||||
RPAREN = \)
|
||||
COMMA = ,
|
||||
WHITESPACE = [\s\t\n]+
|
||||
|
||||
Rules.
|
||||
%% Match function names, variable names (with ${}), strings, numbers, and structural characters
|
||||
{WHITESPACE} : skip_token.
|
||||
{IDENTIFIER} : {token, {identifier, TokenLine, TokenChars}}.
|
||||
{SQ_STRING} : {token, {string, TokenLine, unquote(TokenChars, $')}}.
|
||||
{DQ_STRING} : {token, {string, TokenLine, unquote(TokenChars, $")}}.
|
||||
{NUMBER} : {token, {number, TokenLine, TokenChars}}.
|
||||
{LPAREN} : {token, {'(', TokenLine}}.
|
||||
{RPAREN} : {token, {')', TokenLine}}.
|
||||
{COMMA} : {token, {',', TokenLine}}.
|
||||
|
||||
Erlang code.
|
||||
|
||||
unquote(String, Char) ->
|
||||
string:trim(String, both, [Char]).
|
Loading…
Reference in New Issue