Compiler construction 如何为ErlangVM编译
我正在尝试为应用程序中的用户脚本实现一种小型描述语言。用户基本上描述了如何从其他对象创建对象。(不是真正的编程语言)。我也可以使用JSON(但会更详细) 我使用leex和yecc,我有一个像样的解析树。假设是这样的: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
{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
cerl
Compile
模块编译表单。它可以生成beam二进制文件作为模块加载或创建.beam
文件leex/yecc
(LALR解析器)的替代方案,我们可以使用它来处理PEG语法。这取决于您必须解析的内容。在这里,我需要左递归,不想处理空格
作为一个目标,EVM(光束)似乎相当容易。编译最终只是简单地从一种语言转换到另一种语言,核心Erlang是一种非常简单的语言,但仍然具有表现力 找到这个你可以试着看一些罗伯特·维丁的视频。例如。我相信他至少有2到3个关于类似主题的视频。还有他的,有几个代码示例。此外,您还可以查看或查看在Erlang VM上也实现了哪些。我还发现,很好的信息,但编译的代码非常小。我不认识Joxa,必须检查一下。谢谢,有没有办法把语法形象化?也许是@Themmitraboy中的某些内容,我认为您必须将语法转换为经典的Yacc语法文件(或任何其他流行格式)。我想我是在前一段时间写的,用来生成铁路图,但我记不起来了。