diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/elixir_math_parser.yrl | 31 | ||||
| -rw-r--r-- | src/elixir_math_parser_lexer.xrl | 7 |
2 files changed, 20 insertions, 18 deletions
diff --git a/src/elixir_math_parser.yrl b/src/elixir_math_parser.yrl index 46340ae..86b36c8 100644 --- a/src/elixir_math_parser.yrl +++ b/src/elixir_math_parser.yrl @@ -3,19 +3,16 @@ Nonterminals statement statements expr + exprs . Terminals int var - '+' - '-' - '*' - '/' + break + '+' '-' '*' '/' '=' - '(' - ')' - ';;' + '(' ')' . Rootsymbol @@ -33,18 +30,22 @@ root -> statements : '$1'. statements -> statement : ['$1']. statements -> statement statements : ['$1'|'$2']. -statements -> statement ';;' statements : ['$1'|'$3']. +statements -> statement break statements : ['$1'|'$3']. +statements -> break : []. -statement -> var '=' expr : {assign, '$1', '$3'}. -statement -> expr : {eval, '$1'}. +statement -> var '=' exprs : {assign, '$1', '$3'}. +statement -> exprs : {eval, '$1'}. + +exprs -> expr : '$1'. +exprs -> expr exprs : {mul_op, '$1', '$2'}. expr -> int : unwrap('$1'). expr -> var : '$1'. -expr -> expr '+' expr : {add_op, '$1', '$3'}. -expr -> expr '-' expr : {sub_op, '$1', '$3'}. -expr -> expr '*' expr : {mul_op, '$1', '$3'}. -expr -> expr '/' expr : {div_op, '$1', '$3'}. -expr -> '(' expr ')' : '$2'. +expr -> exprs '+' exprs : {add_op, '$1', '$3'}. +expr -> exprs '-' exprs : {sub_op, '$1', '$3'}. +expr -> exprs '*' exprs : {mul_op, '$1', '$3'}. +expr -> exprs '/' exprs : {div_op, '$1', '$3'}. +expr -> '(' exprs ')' : '$2'. Erlang code. diff --git a/src/elixir_math_parser_lexer.xrl b/src/elixir_math_parser_lexer.xrl index a72f7e3..facf323 100644 --- a/src/elixir_math_parser_lexer.xrl +++ b/src/elixir_math_parser_lexer.xrl @@ -1,8 +1,9 @@ Definitions. INT = [0-9]+ NAME = [a-zA-Z_][a-zA-Z0-9_]* -WHITESPACE = [\s\t\n\r] -COMMENT = #[^\n]* +WHITESPACE = [\s\t\r] +COMMENT = #[^\n]*\n? +BREAK = [\n;;] Rules. \+ : {token, {'+', TokenLine}}. @@ -12,7 +13,7 @@ Rules. \= : {token, {'=', TokenLine}}. \( : {token, {'(', TokenLine}}. \) : {token, {')', TokenLine}}. -;; : {token, {';;', TokenLine}}. +{BREAK}+ : {token, {break, TokenLine}}. {NAME} : {token, {var, TokenLine, TokenChars}}. {INT} : {token, {int, TokenLine, TokenChars}}. {WHITESPACE}+ : skip_token. |
