現在、SML で記述した AST ツリーを Java で表現する作業を行っているため、いつでも Java でトラバースできます。
特定のノードの子を表す配列リスト (リスト) とともに、表現したいデータを持つ Node クラスを Java で作成するだけでよいのでしょうか? 次に、ルート ノードのみを持つ 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
。