Сдвиг уменьшить и уменьшить уменьшить конфликты

Мне трудно обдумать это, и мне нужна помощь, чтобы понять, как сдвиг сокращается, а конфликты уменьшаются. У меня есть грамматика, которую я не могу понять, почему это проблематично. Я мог бы приложить грамматику, но я хочу узнать, как это действительно работает.

Первый вопрос: какой тип парсера создает MGrammer? Насколько я понимаю, сдвиги уменьшают и уменьшают уменьшают конфликты, зависит от типа парсера.

Второй вопрос: что означает конфликт сокращения и уменьшения и что конфликт сокращения?

Я знаю основы лексического анализа и формальной грамматики, но прошло много времени с тех пор, как я работал с языковым дизайном, поэтому любая помощь здесь очень уместна.

Обновить:

Я работаю со значимым пробельным языком, и мне интересно узнать о возможностях сделать это в MGrammar. Нужно ли мне смотреть в голову, чтобы разрешить неясности?

1 ответ

Решение

Простой пример:

if cond
    if cond2
        cmd
    else
        cmd2

Вопрос: Откуда else принадлежать? Для человеческого глаза отступ говорит "второму if"но это ничего не значит для компьютера (кроме случаев использования Python;)). Это конфликт сдвига / уменьшения.

Элегантным решением является лечение else как оператор левой привязки наивысшего приоритета (который заставляет его "зависать" к ближайшему if).

Сокращение / уменьшение конфликта - это двусмысленность. У меня нет хорошего удобного примера, но это означает, что в грамматике есть пути, где один токен может привести к сокращению двух правил одновременно, и нет никакой дополнительной информации, чтобы решить, какое правило должно иметь приоритет.

[РЕДАКТИРОВАТЬ] Документы бизонов есть пример для уменьшения / уменьшения.

Другие вопросы по тегам