【发布时间】:2012-03-26 16:44:00
【问题描述】:
我有我的解析树,现在我已经在解析树上按顺序遍历并生成了一个符号表。 但是我该如何为此构建 AST?
这是我收集到的(一些不可靠的资源):
- 在您的解析树中,您按顺序排列,即 取最左边的孩子,然后是父母,然后是其他孩子的列表。
- 如果您遇到 SEMICOL、Parenthesis 之类的内容,请不要将其添加到 AST,如果某个节点只有一个子节点,请删除该节点,然后改用子节点。
这就是我需要做的一切吗?
【问题讨论】:
-
生成符号表令人印象深刻,因为此时您不知道范围。
-
@Hogan 我有解析树,什么会阻止我知道范围?
-
此时您的系统不应包含任何语义信息。你刚刚解析了它。
-
@Kraken - 您的解析树和 AST 有何不同?它们可以是几乎相同的东西。就个人而言,我一直将解析树视为 AST,尽管我不是专家 - 我只编写了一些未发布的特定领域语言。也就是说,从一种树形式转换为另一种树形式实际上只是遍历旧树和创建新树的组合 - 如果您可以在解析时创建解析树,那么在遍历旧树时生成新树应该不会有太多麻烦一。您甚至可以选择遍历顺序和限制以适合您生成的内容。
-
@Hogan 来自我的解析树,在遍历它之后,我查看了所有声明的 ID 并将它们的信息添加到表中。