информация о зубрах - приоритет в рекурсивном разборе - PullRequest
0 голосов
/ 04 февраля 2019

в информационном документе бизона, упомянуто, что правило получает свой приоритет от последнего терминального символа.вставлено ниже: https://www.gnu.org/software/bison/manual/html_node/How-Precedence.html#How-Precedence

Первым результатом объявления приоритета является назначение уровней приоритета объявленным терминальным символам.Второй эффект заключается в назначении уровней приоритета определенным правилам: каждое правило получает свой приоритет от последнего терминального символа, упомянутого в компонентах.

Для приведенного ниже примера, как будет происходить синтаксический анализ, если указан выше:

nonterm1 : nonterm2
                 | nonterm1 term1 nonterm3 nonterm4
                 | nonterm1 term2 nonterm5 nonterm6

Еще один пример:

nonterm1 : nonterm2 nonterm3
                  | nonterm1 term1 nonterm2 nonterm3
                  | nonterm1 term2 nonterm2 nonterm3

Рассмотрим первый пример.Первый синтаксический анализатор будет использовать nonterm2, затем для правила term1, nonterm1 будет содержать nonterm2 значение и term2 более высокий приоритет, чем term1, синтаксический анализатор должен передать значение nonterm1 в term2 правиле, но этонедопустимо, если мы предоставляем term1 приоритет правила term1, потому что, как следует из утверждения, последний терминальный токен дает приоритет правила.Присвоить значение nonterm3 nonterm4 nonterm1 в term2 правиле невозможно или нет?

Значение для термина или нетерминального, но не частичного набора символов в правиле или это возможно?

Говорит ли инфо-документ, что последний символ терминала означает «последний, но один», который, если он является терминалом?

1 Ответ

0 голосов
/ 04 февраля 2019

Приоритетом производства по умолчанию является объявленный приоритет последнего терминала с правой стороны производства, независимо от того, сколько (или несколько) нетерминалов следует.

Еслиэтот терминал не имеет заявленного приоритета, тогда производство также не имеет заявленного приоритета.

Приоритет объявляется с помощью объявлений %left, %right, %precedence и %nonassoc в прологе.

Приоритет используется только для устранения неоднозначности.Если грамматика полностью определяет действие синтаксического анализа, уровни приоритета не используются.

...