2012-01-11 216 views
0
s : cmd 
    | cmd SOMETHING 

cmd :WORD 

WORD和什么事都是非空终端什么是这个语法

这是一个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) 

回答

2

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

+0

它基于$这里的标记输入结束的前视符号 – 2012-01-11 17:02:40

+0

但它仍然需要检查符号,它涉及要求输入。 – 2012-01-26 19:45:33