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