Сдвиг уменьшить и уменьшить уменьшить конфликты
Мне трудно обдумать это, и мне нужна помощь, чтобы понять, как сдвиг сокращается, а конфликты уменьшаются. У меня есть грамматика, которую я не могу понять, почему это проблематично. Я мог бы приложить грамматику, но я хочу узнать, как это действительно работает.
Первый вопрос: какой тип парсера создает MGrammer? Насколько я понимаю, сдвиги уменьшают и уменьшают уменьшают конфликты, зависит от типа парсера.
Второй вопрос: что означает конфликт сокращения и уменьшения и что конфликт сокращения?
Я знаю основы лексического анализа и формальной грамматики, но прошло много времени с тех пор, как я работал с языковым дизайном, поэтому любая помощь здесь очень уместна.
Обновить:
Я работаю со значимым пробельным языком, и мне интересно узнать о возможностях сделать это в MGrammar. Нужно ли мне смотреть в голову, чтобы разрешить неясности?
1 ответ
Простой пример:
if cond
if cond2
cmd
else
cmd2
Вопрос: Откуда else
принадлежать? Для человеческого глаза отступ говорит "второму if
"но это ничего не значит для компьютера (кроме случаев использования Python;)). Это конфликт сдвига / уменьшения.
Элегантным решением является лечение else
как оператор левой привязки наивысшего приоритета (который заставляет его "зависать" к ближайшему if
).
Сокращение / уменьшение конфликта - это двусмысленность. У меня нет хорошего удобного примера, но это означает, что в грамматике есть пути, где один токен может привести к сокращению двух правил одновременно, и нет никакой дополнительной информации, чтобы решить, какое правило должно иметь приоритет.
[РЕДАКТИРОВАТЬ] Документы бизонов есть пример для уменьшения / уменьшения.