"Если грамматика создает по крайней мере 2 различных дерева синтаксического анализа или деривации, то грамматика неоднозначна." Еще одно правило: все CFG (без бесполезных символов) с леворекурсивностью и праворекурсивностью для одного и того же нетерминала тоже неоднозначны.
Как узнать, неоднозначна ли грамматика?
Грамматика называется неоднозначной, если существует более одного крайнего левого производного, или более одного крайнего правого производного, или более одного дерева синтаксического анализа для заданной входной строки. Если грамматика не является неоднозначной, то она называется однозначной. Если грамматика имеет неоднозначность, то она не годится для построения компилятора.
Что такое неоднозначная грамматика, приведите пример?
В информатике неоднозначная грамматика - это контекстно-свободная грамматика, для которой существует строка, которая может иметь более одного крайнего левого вывода или дерева синтаксического анализа, в то время как однозначная грамматика является контекстно-свободной грамматикой, для которой каждая допустимая строка имеет уникальное крайнее слева дерево вывода или разбора.
Как вы доказываете, что контекстно-свободная грамматика неоднозначна?
3 ответа
- Все CFG без бесполезных символов и с левой и правой рекурсией для одного и того же символа неоднозначны. В общем: …
- Чтобы проверить неоднозначность, вы должны найти 2 крайних левых производных для одной и той же строки (или 2 крайних правых производных, или 2 дерева производных).
Как вы решаете неоднозначную грамматику?
Методы устранения двусмысленности-
- Исправляя грамматику.
- Добавляя правила группировки.
- Используя семантику и выбирая синтаксический анализ, который имеет наибольший смысл.
- Добавляя правила приоритета или другие контекстно-зависимые правила синтаксического анализа.