Arithmetic evaluation: Difference between revisions
Content added Content deleted
(→{{header|RPL}}: real AST-based evaluator) |
No edit summary |
||
Line 1,657: | Line 1,657: | ||
} |
} |
||
}</syntaxhighlight> |
}</syntaxhighlight> |
||
=={{header|Elixir}}== |
|||
In Elixir AST is a built-in feature. |
|||
<syntaxhighlight lang="elixir"> |
|||
defmodule Ast do |
|||
def main do |
|||
expr = IO.gets("Give an expression:\n") |> String.Chars.to_string |> String.trim |
|||
case Code.string_to_quoted(expr) do |
|||
{:ok, ast} -> |
|||
IO.puts("AST is: " <> inspect(ast)) |
|||
{result, _} = Code.eval_quoted(ast) |
|||
IO.puts("Result = #{result}") |
|||
{:error, {_meta, message_info, _token}} -> |
|||
IO.puts(message_info) |
|||
end |
|||
end |
|||
end |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
>elixir -e Ast.main() |
|||
Give an expression: |
|||
2*(4 - 1) |
|||
AST is: {:*, [line: 1], [2, {:-, [line: 1], [4, 1]}]} |
|||
Result = 6 |
|||
>elixir -e Ast.main() |
|||
Give an expression: |
|||
2*(4 - 1) + ( |
|||
missing terminator: ) (for "(" starting at line 1) |
|||
</pre> |
|||
=={{header|Emacs Lisp}}== |
=={{header|Emacs Lisp}}== |