我写了以下语法:
S->S ( S ) S
S->e
e 代表“空字符串”
所以这个文法识别的语言包括所有左右括号匹配的字符串,比如()、(())、(()())等。
而且这个语法不是 SLR,这是我构造 SLR 解析表的方式:
扩充这个语法:
S1->S S->S(S)S S->e
然后为它构造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。谢谢。