diff options
Diffstat (limited to 'src/elixir_math_parser.yrl')
| -rw-r--r-- | src/elixir_math_parser.yrl | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/elixir_math_parser.yrl b/src/elixir_math_parser.yrl new file mode 100644 index 0000000..4900996 --- /dev/null +++ b/src/elixir_math_parser.yrl @@ -0,0 +1,44 @@ +Nonterminals + root + assignment + assignments + expr +. + +Terminals + int + atom + '+' + '-' + '*' + '/' + '=' +. + +Rootsymbol + root +. + +Right 100 '='. +Left 300 '+'. +Left 300 '-'. +Left 400 '*'. +Left 400 '/'. + +root -> assignments : '$1'. + +assignments -> assignment : '$1'. +assignments -> assignment assignments : lists:merge('$1', '$2'). + +assignment -> atom '=' expr : [{assign, '$1', '$3'}]. + +expr -> int : unwrap('$1'). +expr -> atom : '$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'}. + +Erlang code. + +unwrap({int, Line, Value}) -> {int, Line, list_to_integer(Value)}. |
