Как самый простой способ сказать, является ли грамматика BNF неоднозначной или нет?

StackOverflow https://stackoverflow.com/questions/4788148

Вопрос

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

Это было полезно?

Решение

Может быть некоторая особенность в отношении грамматики в стиле BNF, но в целом, решить, является ли данная грамматика без свободной от контекста (например, BNF), невозможно.

Короче говоря, нет инструмента, потому что в целом этот инструмент математически невозможен. Хотя могут быть некоторые особые случаи, которые могут сработать для вас.

Другие советы

В общем, нет.

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

Наш DMS Software Reenerineering Toolkit является системой преобразования программы для произвольных компьютерных лангаугес, обусловленных явными описаниями грамматики. DMS использует генератор анализатора для управления своим двигателем анализа GLR.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top