0

現在、SML で記述した AST ツリーを Java で表現する作業を行っているため、いつでも Java でトラバースできます。

特定のノードの子を表す配列リスト (リスト) とともに、表現したいデータを持つ Node クラスを Java で作成するだけでよいのでしょうか? 次に、ルート ノードのみを持つ ASTTree クラスを作成します。

もっと凝ったものを検討する必要があるかどうかはわかりません。

ご質問やコメントをお待ちしております。

-ポール

4

1 に答える 1

1

それは、そのツリーで何をしたいかによって異なります。

私は通常、必要な操作の種類ごとに特定のノードを作成して実装します。たとえば、

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 にアクセスし、再帰的にツリーにアクセスして中間コードを生成しましArrayListASTNode

于 2010-07-06T12:28:14.487 に答える