我有一个解析树为我的编译器,我想知道什么遍历我的解析树会给我相同的顺序,我的源代码被测试的代,什么遍历树会给我正确的结果
我认为这应该是预购,但我被告知它是有序的,有人可以告诉我为什么。另外,如果我想知道在我的解析器中,什么时候完成了一些标识符的声明(比如说非终结符号declaration
已经为此生成了),那么我的选择顺序是什么样的。预购?
我有一个解析树为我的编译器,我想知道什么遍历我的解析树会给我相同的顺序,我的源代码被测试的代,什么遍历树会给我正确的结果
我认为这应该是预购,但我被告知它是有序的,有人可以告诉我为什么。另外,如果我想知道在我的解析器中,什么时候完成了一些标识符的声明(比如说非终结符号declaration
已经为此生成了),那么我的选择顺序是什么样的。预购?
你想做一个有序的遍历。如果您在this AST上进行按顺序遍历,您将按照它们在源代码中编写的顺序访问构造。
另外,如果我想找出我的解析器,当时正值标识符的一些 声明做,(说非终结声明有 生产为)比我该选择什么遍历的顺序。 预购?
不太确定这里是什么意思,但是如果您指的是查找声明符号的位置(行,字符或列号),那么应该使用标识符存储该信息AST节点插入树中时。大多数解析器在匹配某个令牌时会跟踪该信息。
但是,将位置信息与符号表条目一起存储会更有效,而不是在需要时遍历树。
得到明确,你分析是这样的:
x = a + b
的序是:
(=, (+, a, b))
和序是
(x, =, (a, +, b))
吧?
我不确定你的意思是“与我的源代码测试代代相同的顺序”,但我真的猜测你要求提供你的表达式。
如果你有继承的属性,那么你可能需要inorder遍历。
假设你想分析
int a;
,为此申报生产规则是
Statment - >输入ID;
类型 - > int |漂浮所以你看,你需要将Type(int或float)传递给id(在这种情况下,a)。这个信息传递可以通过遍历来完成。
请翻译“我的源代码测试代码的相同顺序”。 – EJP 2012-03-22 21:39:57