gpt4 book ai didi

compiler-construction - 如何为 Erlang VM 编译

转载 作者:行者123 更新时间:2023-12-04 08:24:31 24 4
gpt4 key购买 nike

我正在尝试为应用程序中的用户脚本实现一种小型描述语言。基本上,用户描述了如何从其他对象创建对象。 (不是真正的编程语言)。我也可以使用 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 定义语法并构建解析器
  • 使用词法分析器标记源代码
  • 使用由 token 提供的解析器构建解析树
  • 使用 cerl 生成核心 erlang 表单模块
  • 使用 compile 编译表单模块。它可以生成梁二进制文件作为模块加载或创建 .beam文件

  • 作为 leex/yecc 的替代品(LALR 解析器)我们可以使用 neotoma它适用于 PEG 语法。这取决于你必须解析什么。我需要左递归并且不想处理空格。

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

    关于compiler-construction - 如何为 Erlang VM 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17523814/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com