Compiler construction 如何为ErlangVM编译

Compiler construction 如何为ErlangVM编译,compiler-construction,erlang,leex,yecc,Compiler Construction,Erlang,Leex,Yecc,我正在尝试为应用程序中的用户脚本实现一种小型描述语言。用户基本上描述了如何从其他对象创建对象。(不是真正的编程语言)。我也可以使用JSON(但会更详细) 我使用leex和yecc,我有一个像样的解析树。假设是这样的: {def,double, %% function name double [{x}], %% list of input names %% return expression, in this case {Operator, Operand1, Oper

我正在尝试为应用程序中的用户脚本实现一种小型描述语言。用户基本上描述了如何从其他对象创建对象。(不是真正的编程语言)。我也可以使用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.
但我不知道从哪里开始。我可以在运行时阅读树并构建FUN,但我真的很想学习如何编译(并希望获得更好的性能)

我是否应该将解析树转换为Erlang AST,然后编译Erlang模块


谢谢。

因此,经典的工作流程是:

  • 定义令牌并使用
    leex
  • 定义语法并使用
    yecc
  • 使用lexer标记源代码
  • 构建一个语法分析树,语法分析程序使用标记进行填充
  • 生成包含
    cerl
  • 使用
    Compile
    模块编译表单。它可以生成beam二进制文件作为模块加载或创建
    .beam
    文件
  • 作为
    leex/yecc
    (LALR解析器)的替代方案,我们可以使用它来处理PEG语法。这取决于您必须解析的内容。在这里,我需要左递归,不想处理空格


    作为一个目标,EVM(光束)似乎相当容易。编译最终只是简单地从一种语言转换到另一种语言,核心Erlang是一种非常简单的语言,但仍然具有表现力

    找到这个你可以试着看一些罗伯特·维丁的视频。例如。我相信他至少有2到3个关于类似主题的视频。还有他的,有几个代码示例。此外,您还可以查看或查看在Erlang VM上也实现了哪些。我还发现,很好的信息,但编译的代码非常小。我不认识Joxa,必须检查一下。谢谢,有没有办法把语法形象化?也许是@Themmitraboy中的某些内容,我认为您必须将语法转换为经典的Yacc语法文件(或任何其他流行格式)。我想我是在前一段时间写的,用来生成铁路图,但我记不起来了。