gpt4 book ai didi

java - 给定另一个 AST 树,在 Java 中创建一个 AST 树

转载 作者:行者123 更新时间:2023-12-01 16:03:34 28 4
gpt4 key购买 nike

目前,我正在努力用 Java 表示我用 SML 编写的 AST 树,这样我就可以随时用 Java 遍历它。

我想知道是否应该在 Java 中创建一个 Node 类,其中包含我想要表示的数据,以及一个数组列表(List)来表示该特定节点的子节点?然后,我可以拥有一个仅包含根节点的 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 的特定行为和含义。

关于java - 给定另一个 AST 树,在 Java 中创建一个 AST 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186097/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com