Я читаю о парсере LR (0) из этой книги: Современная реализация компилятора в Java. Ниже приведен пример таблицы анализа, основанной на книге. http://postimg.org/image/hyowddu1h/Есть ли правило большого пальца, для которого символ сдвигается первым при генерации таблицы парсеров LR (0)?
символ Старт: S -> Е $
Продукция:
(1) Е -> Т + Е
(2) Е -> Т
(3) T -> x
Я попытался составить таблицу синтаксического анализа на основе данных, но я не получил такой же синтаксический стол, как в книге. Кажется, я правильно переместил символ. Просто у меня есть разная таблица разбора, чем в книге. (Примечание: я начал с состояния 0 вместо состояния 1, как в книге)
Так ли таблица синтаксического анализа уникальна или есть какое-либо правило большого пальца руки для определения того, какой символ сначала следует перенести в стек, или как обозначить правильно разобрать состояние? Я всегда сначала переношу символы терминала, а затем нетерминальные символы, как показано ниже: http://postimg.org/image/76vbu2vu3/
Заранее благодарен!
Я сравнивал свои состояния переходы/сопоставление с одним в учебнике, и они одинаковы. Поэтому мое понимание из вашего ответа заключается в том, что сопоставление важнее, чем маркировка состояния синтаксического анализа. Следовательно, поскольку мое сопоставление правильное, таблица разбора, которую я построил, также правильна, несмотря на то, что она отличается от той, что написана в учебнике. Я прав? – sw2
@ sw2: совершенно. Нумерация состояний никоим образом не влияет на работу конечного автомата. Это даже не часть государственной машины. – rici
Хорошо, теперь я понимаю. Спасибо! – sw2