s : cmd
| cmd SOMETHING
cmd :WORD
WORD和SOMETHING是非空终端
这是一个LR1语法,所以野牛应该毫无问题地解析它。
然而我在运行时遇到了意想不到的问题: 程序提示输入两次,所以例如当我输入“qwerty”时它会提示第二次输入,当我尝试调试时我得到这个:
Starting parse
Entering state 0
Reading a token: qwerty
Next token is token WORD
Shifting token WORD
Entering state 1
Reducing stack by rule 3 (line 20):
$1 = token WORD ()
-> $$ = nterm cmd ()
Stack now 0
Entering state 3
Reading a token:
(asks for input a second time)
答案 0 :(得分:2)
在尝试读取SOMETHING并成功(第二条规则)或失败(第一条规则)之前,它将如何知道s采用哪条规则?这意味着它要求第二个输入。