Какой самый простой способ определить, является ли грамматика БНФ неоднозначной или нет? - PullRequest
11 голосов
/ 25 января 2011

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

Ответы [ 2 ]

5 голосов
/ 26 января 2011

В грамматике в стиле BNF может быть какая-то особенность, но в целом решение о том, является ли данная контекстно-свободная грамматика (такая как BNF) неоднозначным, невозможно.инструмент, потому что в целом этот инструмент математически невозможен.Однако могут быть некоторые особые случаи, которые могут работать на вас.

2 голосов
/ 09 июля 2011

В общем, нет.

Но в качестве практического подхода для каждого правила дается грамматика, состоящая в том, чтобы перечислять возможные строки действительных терминалов / нетерминалов, чтобы увидеть, имеет ли какое-либо правило два или более эквивалентных производных (которыебыло бы неоднозначно).

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

Генератор синтаксического анализатора DMS по выбору выполнит проверку неоднозначности, описанную выше, путем выполнения итеративного углубленного поиска по всем правилам грамматики.Это практично, потому что в нем есть таблицы разбора для эффективного управления перечислением вариантов.Вы можете сказать ему, чтобы выполнить эту проверку до некоторой выбранной глубины.Это может занять много времени, если вы выберете глубину любого интересного размера, но на самом деле глубины 3 или 4 достаточно, чтобы найти много глупых двусмысленностей, введенных в большую грамматику.Обычно мы делаем это во время нашей начальной отладки грамматики, и в тот момент, когда мы думаем, что у нас все в порядке.

...