diff options
| author | William Hergès <william@herges.fr> | 2025-11-08 21:31:48 +0100 |
|---|---|---|
| committer | William Hergès <william@herges.fr> | 2025-11-08 21:31:48 +0100 |
| commit | aa1d984db18333d89b6bb2b1fa9852f85edba2de (patch) | |
| tree | 304ea07295475003c192ef4d587c615a597fb9d9 /src | |
| parent | 0c49df8a68d47b5c42e1d28b43111c341b540145 (diff) | |
feat(calc): strengthen reducing
Diffstat (limited to 'src')
| -rw-r--r-- | src/elixir_math_parser.yrl | 14 | ||||
| -rw-r--r-- | src/elixir_math_parser_lexer.xrl | 3 |
2 files changed, 10 insertions, 7 deletions
diff --git a/src/elixir_math_parser.yrl b/src/elixir_math_parser.yrl index 762cf4b..3ec4946 100644 --- a/src/elixir_math_parser.yrl +++ b/src/elixir_math_parser.yrl @@ -1,7 +1,7 @@ Nonterminals root - assignment - assignments + statement + statements expr . @@ -15,6 +15,7 @@ Terminals '=' '(' ')' + ';;' . Rootsymbol @@ -28,12 +29,13 @@ Left 400 '*'. Left 400 '/'. Left 600 '('. -root -> assignments : '$1'. +root -> statements : '$1'. -assignments -> assignment : '$1'. -assignments -> assignment assignments : lists:merge('$1', '$2'). +statements -> statement : '$1'. +statements -> statement statements : lists:merge('$1', '$2'). +statements -> statement ';;' statements : lists:merge('$1', '$3'). -assignment -> atom '=' expr : [{assign, '$1', '$3'}]. +statement -> atom '=' expr : [{assign, '$1', '$3'}]. expr -> int : unwrap('$1'). expr -> atom : '$1'. diff --git a/src/elixir_math_parser_lexer.xrl b/src/elixir_math_parser_lexer.xrl index 8d7920a..7256090 100644 --- a/src/elixir_math_parser_lexer.xrl +++ b/src/elixir_math_parser_lexer.xrl @@ -1,7 +1,7 @@ Definitions. INT = [0-9]+ NAME = :[a-zA-Z_][a-zA-Z0-9_]* -WHITESPACE = [\s\t\n\r]|;{2} +WHITESPACE = [\s\t\n\r] Rules. \+ : {token, {'+', TokenLine}}. @@ -11,6 +11,7 @@ Rules. \= : {token, {'=', TokenLine}}. \( : {token, {'(', TokenLine}}. \) : {token, {')', TokenLine}}. +;; : {token, {';;', TokenLine}}. {NAME} : {token, {atom, TokenLine, to_atom(TokenChars)}}. {INT} : {token, {int, TokenLine, TokenChars}}. {WHITESPACE}+ : skip_token. |
