aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/elixir_math_parser.yrl31
-rw-r--r--src/elixir_math_parser_lexer.xrl7
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.