【发布时间】:2014-05-11 06:42:29
【问题描述】:
我正在尝试为应用程序中的用户脚本实现一种小型描述语言。基本上,用户描述了如何从其他对象创建对象。 (不是真正的编程语言)。我也可以使用 JSON(但会更冗长)。
我使用 leex 和 yecc,我有一个不错的解析树。说它是这样的:
{def,double, %% function name double
[{x}], %% list of input names
%% return expression, in this case {Operator, Operand1, Operand2}
{'*',{var,x},{number,2}}
}.
有了这棵树,我想构建这样的东西:
double(State) ->
_Var1 = some_app:get_input(State,x),
_Var1 * 2.
但我不知道从哪里开始。我可以在运行时读取树并构建乐趣,但我真的很想学习如何编译(并希望有更好的性能)。
我应该将我的解析树转换为 Erlang AST,然后编译 erlang 模块吗?
谢谢。
【问题讨论】:
-
您可以尝试观看 Robert Virding 的一些视频。例如,Implemting Languages on the Erlang VM。我相信他至少有 2 或 3 个类似主题的视频。还有他的github,有几个代码示例。此外,您可以查看 Elixir 或 Joxa,它们也在 Erlang VM 上实现。
-
是的,我以长生不老药为例。我还找到了this,信息很好,但编译的代码非常小。不知道 Joxa,必须检查一下。谢谢
标签: compiler-construction erlang leex yecc