簡體   English   中英

給定另一個AST樹,用Java創建AST樹

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM