我的编译器有一个解析树,我想知道我的解析树的遍历将给出与源代码测试生成相同的顺序,
我认为它应该是预订,但我被告知它是有序的,有人可以告诉我原因。
另外,如果我想在我的解析器中找到,那么标识符的声明是什么时候完成的,(比如说非终结declaration
有生成),而不是我选择的遍历顺序。预购?
答案 0 :(得分:1)
要弄清楚,你解析类似的东西:
x = a + b
预购单是:
(=, (+, a, b))
并且顺序是
(x, =, (a, +, b))
正确?
我不确定你的意思是什么"我的源代码测试代码的顺序与#34;,但我真的猜你要求你的表达顺序。
答案 1 :(得分:0)
您想要进行有序遍历。如果你在this AST上进行有序遍历,那么你将按照它们在源代码中编写的顺序访问构造。
另外,如果我想在我的解析器中找到它,那么什么时候 标识符声明已经完成,(例如非终结声明已经完成) 那个生产)比我选择的遍历顺序。 预购?
这里不太清楚你的意思,但如果你指的是找到声明符号的位置(行,字符或列号),那么该信息应该与标识符AST节点一起存储它被插入树中。大多数解析器在匹配某些令牌时跟踪该信息。
但是,将位置信息与符号表条目一起存储会更有效,而不是在需要时遍历树。
答案 2 :(得分:0)
如果你有继承属性,那么你可能需要顺序遍历。
假设您要解析
int a;
此声明的制作规则是
声明 - >输入id;
类型 - > int |漂浮;
所以你看,你需要将Type(int或float)传递给id(在这种情况下是a)。这种信息传递可以通过inorder遍历来完成。