繁体   English   中英

如何编译Erlang VM

[英]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模块吗?

谢谢。

所以,经典的工作流程是这样的:

  1. 定义标记并使用leex构建词法分析器
  2. 定义语法并使用yecc构建解析器
  3. 使用词法分析器标记源代码
  4. 使用带有令牌的解析器构建解析树
  5. 生成核心二郎形式模块蒙山cerl
  6. 使用compile模块编译表单。 它可以生成梁二进制文件作为模块加载或创建.beam文件

作为leex/yecc (LALR解析器)的替代方案,我们可以使用与PEG语法一起使用的neotoma 这取决于你要解析的内容。 我需要左递归,不想处理空格。

作为目标,EVM(BEAM)似乎很容易。 编译最终只是简单地从一种语言翻译成另一种语言而Core Erlang是一种非常简单的语言,但仍然具有表现力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM