[英]How to compile for the Erlang VM
我正在尝试为应用程序中的用户脚本实现一种小型描述语言。 用户基本上描述了如何从其他对象创建对象。 (不是真正的编程语言)。 我也可以使用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模块吗?
谢谢。
所以,经典的工作流程是这样的:
leex
构建词法分析器 yecc
构建解析器 cerl
compile
模块编译表单。 它可以生成梁二进制文件作为模块加载或创建.beam
文件 作为leex/yecc
(LALR解析器)的替代方案,我们可以使用与PEG语法一起使用的neotoma 。 这取决于你要解析的内容。 我需要左递归,不想处理空格。
作为目标,EVM(BEAM)似乎很容易。 编译最终只是简单地从一种语言翻译成另一种语言而Core Erlang是一种非常简单的语言,但仍然具有表现力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.