这个语法有什么问题

时间:2012-01-11 16:49:21

标签: grammar bison yacc lr1

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)

1 个答案:

答案 0 :(得分:2)

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