【问题标题】:Creating an AST node in Erlang在 Erlang 中创建一个 AST 节点
【发布时间】:2012-05-22 22:33:53
【问题描述】:

我正在玩 Erlang,我正在尝试编写一个简单的算术解析器。

我想尝试解析以下表达式:

((12+3)-4)

我想将表达式解析成一堆 AST 节点。在解析这个表达式时,我首先会为 (12+3) 表达式创建一个二进制表达式,它在 C# 中看起来像这样:

var binaryStructure = new BinaryStructure();
binaryStructure.Left = IntegerLiteralExpression(12);
binaryStructure.Right = IntegerLiteralExpression(4);
binaryStructure.Operator = binaryExpression.Operator != BinaryOperatorType.Addition;

我对 Erlang 还很陌生,我想知道如何在 Erlang 中创建一个这样的结构,我可以将它放在一个 List 上,用作表达式堆栈。

谁能建议如何创建这样一个树状结构?函数会很合适吗?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    在像 Erlang 这样的函数式语言中,它要简单得多。做吧

    {'+', 12, 3}
    

    以更抽象的方式

    A = 12,
    B = 3,
    OP = '+',
    {OP, A, B}.
    

    【讨论】:

      【解决方案2】:

      另外,查看stdlib 应用程序中的erl_parse.erl 模块。

      mkop函数读取:

      mkop(L, {Op,Pos}, R) -> {op,Pos,Op,L,R}.                                        
      
      mkop({Op,Pos}, A) -> {op,Pos,Op,A}.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        相关资源
        最近更新 更多