[英]Creating an AST Tree in Java given another AST Tree
目前,我正在用Java表示用SML編寫的AST樹,以便可以隨時在Java中遍歷它。
我想知道是否應該在Java中創建一個Node類,該類具有要表示的數據,以及一個表示該特定節點的子代的數組列表(列表)? 然后,我可以擁有僅具有根節點的ASTTree類。
我不知道是否還有其他需要考慮的東西。
任何問題/意見將不勝感激!
保羅
這取決於您要對該樹執行的操作。
我通常通過為需要的每種操作創建一個特定的節點來實現它,例如
ASTBinaryOperation implements ASTNode
{
ASTNode left, right;
Operator op;
Result visit()
{
Result lr = left.visit();
Result rr = right.visit();
return op.apply(lr, rr);
}
}
對於經典的二進制運算符節點,而我將使用ArrayList
作為聲明的示例:
ASTDecl implements ASTNode
{
String name;
Type type;
Value value;
}
ASTDecls implements ASTNode
{
ArrayList<ASTDecl> declarations;
}
由解析器建立。 因此,根節點類似於:
ASTRoot {
ASTDecls declarations;
ASTFunctions functions;
}
ASTFunctions {
ASTDecls args;
ASTBody body;
..
}
ASTBody {
ArrayList<ASTStatement> statements;
...
}
等等。
當然,這取決於您要執行的操作,我使用這種方法來訪問AST,以通過遞歸地訪問樹來生成中間代碼。但是將任何內容存儲在ArrayList
將使您失去單個ASTNode
的特定行為和含義。 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.