0
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)
4

1 回答 1

2

在尝试读取 SOMETHING 并且成功(第二条规则)或失败(第一条规则)之前,它如何知道 s 使用哪个规则?这意味着它必须要求第二个输入。

于 2012-01-11T16:53:13.113 回答