Что случилось с этой грамматикой

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 ответ

Решение

Как он узнает, какое правило для s использовать, пока не попытается прочитать что-то, и либо успешно (второе правило), либо потерпит неудачу (первое правило)? Что означает, что нужно запросить второй вход.

Другие вопросы по тегам