如何解析这个语法?

时间:2016-02-18 22:35:52

标签: parsing compiler-construction grammar

我正在学习语法,并在书中列出了这个语法可以毫不含糊地解析数字的减法和乘法。 这是语法:

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(这是我们想要的终端)。

我觉得我在这里错误地理解了一些东西。有人可以解释一下这实际上是如何运作的吗?

1 个答案:

答案 0 :(得分:1)

据我所知,不是使用从根开始的top-down parser,而是bottom-up parser 从树的叶子开始,在这种情况下1 - 2 - 3,将能够构建一个有效的解析树,如下所示:

NUM - NUM - NUM
 \     |     /
 F  -  F  - F
   \   |   /
   E - F - F
     |   /
     E - F
       |
       E
       |
       S