0

我写了以下语法:

S->S ( S ) S
S->e

e 代表“空字符串”

所以这个文法识别的语言包括所有左右括号匹配的字符串,比如()、(())、(()())等。

而且这个语法不是 SLR,这是我构造 SLR 解析表的方式:

  1. 扩充这个语法:

    S1->S S->S(S)S S->e

  2. 然后为它构造LR(0)自动机:

    I0:S1->.S S->.S(S)S S->.e

    I1:S1->S。S->S.(S)S

...

请注意,对于 I0,输入符号 '(' 没有移位或归约操作,这是该语法生成​​的任何字符串的第一个标记。

所以 SLR 解析表会产生错误,因为在状态 I0,它不知道解析字符串时要做什么:(())。

我的问题是:

使这个语法不是 SLR 的罪魁祸首是什么?它是空字符串生产吗?即:S->e。?

而在一般意义上,单反语法可以有空产生式吗?例如,在本例中为 S->e。谢谢。

4

1 回答 1

0

答案是可以的,如果当前输入没有可用的移位/减少操作并且空产品有移位,我们选择在这个空终端上移位。

于 2013-04-18T08:35:03.773 回答