aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--example/input.txt12
-rw-r--r--lib/elixir_math_parser.ex10
-rw-r--r--src/elixir_math_parser.yrl6
-rw-r--r--src/elixir_math_parser_lexer.xrl4
4 files changed, 16 insertions, 16 deletions
diff --git a/example/input.txt b/example/input.txt
index 7233dc7..0d42cb7 100644
--- a/example/input.txt
+++ b/example/input.txt
@@ -1,7 +1,7 @@
-:a = 7;; :b = 4;;
-(:a + :b) * 10 / 2
+a = 7;; b = 4
+(a + b) * 10 / 2
-:x = 20
-:y = 3
-:z = 6
-10 + :z / :y * :x / 4
+x = 20
+y = 3
+z = 6
+10 + z / y * x / 4
diff --git a/lib/elixir_math_parser.ex b/lib/elixir_math_parser.ex
index 4da4271..bb24d88 100644
--- a/lib/elixir_math_parser.ex
+++ b/lib/elixir_math_parser.ex
@@ -7,11 +7,11 @@ defmodule ElixirMathParser do
{:ok, value}
end
- defp reduce_to_value({:atom, _line, atom}, state) do
- if !Map.has_key?(state, atom) do
- {:error, "value not found for " <> to_string(atom)}
+ defp reduce_to_value({:var, _line, var}, state) do
+ if !Map.has_key?(state, var) do
+ {:error, "value not found for " <> to_string(var)}
else
- {:ok, state[atom]}
+ {:ok, state[var]}
end
end
@@ -43,7 +43,7 @@ defmodule ElixirMathParser do
end
end
- defp evaluate_tree([{:assign, {:atom, _line, lhs}, rhs} | tail], state) do
+ defp evaluate_tree([{:assign, {:var, _line, lhs}, rhs} | tail], state) do
with {:ok, val} <- reduce_to_value(rhs, state) do
evaluate_tree(tail, Map.merge(state, %{lhs => val}))
end
diff --git a/src/elixir_math_parser.yrl b/src/elixir_math_parser.yrl
index 17b46ad..46340ae 100644
--- a/src/elixir_math_parser.yrl
+++ b/src/elixir_math_parser.yrl
@@ -7,7 +7,7 @@ Nonterminals
Terminals
int
- atom
+ var
'+'
'-'
'*'
@@ -35,11 +35,11 @@ statements -> statement : ['$1'].
statements -> statement statements : ['$1'|'$2'].
statements -> statement ';;' statements : ['$1'|'$3'].
-statement -> atom '=' expr : {assign, '$1', '$3'}.
+statement -> var '=' expr : {assign, '$1', '$3'}.
statement -> expr : {eval, '$1'}.
expr -> int : unwrap('$1').
-expr -> atom : '$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'}.
diff --git a/src/elixir_math_parser_lexer.xrl b/src/elixir_math_parser_lexer.xrl
index 7256090..d02a62c 100644
--- a/src/elixir_math_parser_lexer.xrl
+++ b/src/elixir_math_parser_lexer.xrl
@@ -1,6 +1,6 @@
Definitions.
INT = [0-9]+
-NAME = :[a-zA-Z_][a-zA-Z0-9_]*
+NAME = [a-zA-Z_][a-zA-Z0-9_]*
WHITESPACE = [\s\t\n\r]
Rules.
@@ -12,7 +12,7 @@ Rules.
\( : {token, {'(', TokenLine}}.
\) : {token, {')', TokenLine}}.
;; : {token, {';;', TokenLine}}.
-{NAME} : {token, {atom, TokenLine, to_atom(TokenChars)}}.
+{NAME} : {token, {var, TokenLine, TokenChars}}.
{INT} : {token, {int, TokenLine, TokenChars}}.
{WHITESPACE}+ : skip_token.