Я пытаюсь понять, как bison строит таблицы для этой простой грамматики:
input: rule ;
rule: rule '+' '1'
| '1' ;
Мне удалось рассчитать таблицу переходов LR(1) и наборы элементов, но я не понимаю, как строится и работает состояние 3:
State 3
1 input: rule . [$end]
2 rule: rule . '+' '1'
'+' shift, and go to state 5
$default reduce using rule 1 (input)
Для правила сокращения по умолчанию я должен поместить «r1» во все ячейки таблицы GOTO для каждого символа. Но для правила сдвига я должен поставить «s5» в столбец для терминала «+» (эта ячейка уже содержит «r1»). Для меня это выглядит как сдвиг/уменьшение конфликта. Но не для бизонов. Пожалуйста, объясните, как этот предварительный просмотр появился в этом состоянии, и как это состояние в целом обрабатывается конечным автоматом LR.