что случилось с этой грамматикой - PullRequest
0 голосов
/ 11 января 2012
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 Ответ

2 голосов
/ 11 января 2012

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

...