在Erlang中创建AST节点

时间:2010-06-04 15:55:34

标签: erlang

我正在玩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上,我将它用作表达式的堆栈。

有谁能建议如何创建这样的树状结构?功能是否合适?

2 个答案:

答案 0 :(得分:6)

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

{'+', 12, 3}

以更抽象的方式

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

答案 1 :(得分:2)

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

阅读mkop函数:

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

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