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

он основан на символе lookahead, который равен $ здесь, который отмечает конец ввода –

+0

Но по-прежнему необходимо проверить этот символ, который включает в себя запрос ввода. –

Смежные вопросы