我正在学习语法,并在书中列出了这个语法可以毫不含糊地解析数字的减法和乘法。 这是语法:
S -> E
E -> E - F
E -> F
F -> F / NUM
F -> NUM
NUM -> 0-9
说你有一些输入,如1 - 2 - 3.从我的理解,解析树将是这样的:
S
|
E
/|\
E - F
/|\
E - E
....
这里我们进入了一个无限循环,因为E - > E - F和E再次进入另一个E - F.我们不能神奇地知道选择去E-> F(这是我们想要的终端)。
我觉得我在这里错误地理解了一些东西。有人可以解释一下这实际上是如何运作的吗?
答案 0 :(得分:1)
据我所知,不是使用从根开始的top-down parser,而是bottom-up parser
从树的叶子开始,在这种情况下1 - 2 - 3
,将能够构建一个有效的解析树,如下所示:
NUM - NUM - NUM
\ | /
F - F - F
\ | /
E - F - F
| /
E - F
|
E
|
S