2010-06-04 94 views
2

我在玩Erlang,我正在嘗試編寫一個簡單的算術分析器。在Erlang中創建一個AST節點

我想嘗試和解析下面的表達式:

((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上。

任何人都可以建議如何創建這樣的樹狀結構嗎?一個功能是否合適?

回答

6

在像Erlang這樣的功能語言中,它要簡單得多。只是使它

{'+', 12, 3} 

在更抽象的方式

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

而且,看看到erl_parse.erl模塊中的stdlib應用。

從到mkop功能閱讀:

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

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