簡體   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