diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/elixir_math_parser.yrl | 21 | ||||
| -rw-r--r-- | src/elixir_math_parser_lexer.xrl | 6 |
2 files changed, 23 insertions, 4 deletions
diff --git a/src/elixir_math_parser.yrl b/src/elixir_math_parser.yrl index 635ebd3..a48b57b 100644 --- a/src/elixir_math_parser.yrl +++ b/src/elixir_math_parser.yrl @@ -4,15 +4,21 @@ Nonterminals statements expr exprs + % function specific + vars params . Terminals int float var break + % eval '+' '-' '*' '/' '!' '^' - '=' '(' ')' + % assign + '=' + % function specific + ':' ',' . Rootsymbol @@ -37,13 +43,22 @@ statements -> break : []. statement -> var '=' exprs : {assign, '$1', '$3'}. statement -> exprs : {eval, '$1'}. +statement -> var ':' vars '=' exprs : {assign_func, '$1', '$3', '$5'}. + +vars -> var : ['$1']. +vars -> var ',' vars : ['$1' | '$3']. -exprs -> expr : '$1'. +exprs -> expr : '$1'. exprs -> expr exprs : {mul_op, '$1', '$2'}. +params -> expr : ['$1']. +params -> expr ',' : ['$1']. +params -> expr ',' params : ['$1' | '$3']. + expr -> int : unwrap('$1'). expr -> float : unwrap('$1'). expr -> var : '$1'. + expr -> exprs '+' exprs : {add_op, '$1', '$3'}. expr -> exprs '-' exprs : {sub_op, '$1', '$3'}. expr -> exprs '*' exprs : {mul_op, '$1', '$3'}. @@ -53,6 +68,8 @@ expr -> exprs '^' exprs : {exp_op, '$1', '$3'}. expr -> '(' exprs ')' : '$2'. expr -> '-' exprs : {sub_op, {int, 0, 0}, '$2'}. +expr -> var '(' params ')' : {eval_func, '$1', '$3'}. + Erlang code. % 95 is the unicode of "_" diff --git a/src/elixir_math_parser_lexer.xrl b/src/elixir_math_parser_lexer.xrl index 4073958..fdb661f 100644 --- a/src/elixir_math_parser_lexer.xrl +++ b/src/elixir_math_parser_lexer.xrl @@ -4,7 +4,7 @@ FLOAT = [0-9_]*\.[0-9]+ NAME = [a-zA-Z_][a-zA-Z0-9_]* WHITESPACE = [\s\t\r] COMMENT = #[^\n]*\n? -BREAK = [\n;;] +BREAK = [\n;;]+ Rules. \+ : {token, {'+', TokenLine}}. @@ -16,7 +16,9 @@ Rules. \) : {token, {')', TokenLine}}. ! : {token, {'!', TokenLine}}. \^ : {token, {'^', TokenLine}}. -{BREAK}+ : {token, {break, TokenLine}}. +\: : {token, {':', TokenLine}}. +, : {token, {',', TokenLine}}. +{BREAK} : {token, {break, TokenLine}}. {NAME} : {token, {var, TokenLine, TokenChars}}. {FLOAT} : {token, {float, TokenLine, TokenChars}}. {INT} : {token, {int, TokenLine, TokenChars}}. |
