1

这是一个如此简单的话题,我为自己感到尴尬。但是我在学期开始前做一些复习题,我意识到我对这个话题完全空白。

假设语法:

int = int digit | digit
digit = 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19

写出左推导和右推导:

15 14 13 12

我知道它应该看起来像:

int => int digit
=> int digit digit
=> int digit digit digit
=> digit digit digit digit

...但是我不知道该怎么做(或者即使是正确的),我也不知道如何在另一个方向上做!

因此,如果有人可以向我解释 a) 将来如何执行此操作,并且 b) 给出答案以便我可以检查我是否理解该过程,那就太好了。我真的很感激任何和所有的帮助!

4

1 回答 1

2

在这种情况下,最左边和最右边的推导是相同的,正如您所展示的。

最左边的推导首先扩展最左边的非终结符;最右边的推导首先扩展最右边的非终结符。

维基百科有很好的例子。 对于语法

S → S + S
S → 1
S → a

这是最左边的推导:

S → S + S
  → 1 + S
  → 1 + S + S
  → 1 + 1 + S
  → 1 + 1 + a

这是最右边的推导:

S → S + S
  → S + a
  → S + S + a
  → S + 1 + a
  → 1 + 1 + a
于 2013-08-31T17:21:23.580 回答