Пока что мое понимание алгоритма анализа снизу вверх таково.
- сдвинуть токен в стек
- проверка стека сверху, если некоторые элементы, включая верх, могут быть уменьшены по производственному правилу
- если элементы можно уменьшить, вытолкните и нажмите левую часть производственного правила.
- продолжайте эти шаги до тех пор, пока top не станет символом начала, а следующий вход не будет EOF
Итак, чтобы подкрепить мой вопрос грамматикой примера,
S → aABe
A → Abc
A → b
B → d
если у нас есть строка ввода как
abbcde $
мы сместим a
в стек
и поскольку не существует производственного правила, которое уменьшает a
, мы сдвигаем следующий токен b
.
Тогда мы можем найти правило производства A → b
и уменьшить b
до A
.
Тогда мой вопрос такой. У нас в стеке aA
, а следующий ввод - b
. Тогда как синтаксический анализатор может определить, уменьшаем ли мы b
до A
, ожидаем ли мы c
и используем правило A → Abc
?
Ну, конечно, уменьшение b
до A
в этот момент приводит к ошибке. Но как парсер узнает в этот момент , что нам следует ждать c
?
Извините, если что-то пропустил во время учебы.