2012-01-11 210 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