Примечание: связанное программное обеспечение DMS стоит денег. На сайте не указана цена; Вы должны позвонить для цитаты.

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

 Noon Silk25 янв. 2011 г., 04:23
Возможно, это актуально:cstheory.stackexchange.com/questions/4352/...

Ответы на вопрос(2)

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

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

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

 Rory O'Kane08 мар. 2013 г., 00:17
Примечание: связанное программное обеспечение DMS стоит денег. На сайте не указана цена; Вы должны позвонить для цитаты.
Решение Вопроса

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

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

 OrangeDog26 янв. 2011 г., 01:22
Более конкретно, вы можете проверить, является ли грамматика неоднозначной, если она есть, но вы не можете доказать, что это не так.
 Ira Baxter17 апр. 2012 г., 01:30
@OrangeDog: Ну, в общем, вы не можете доказать это, но возможно ли это для некоторых грамматик (Вот одна небольшая грамматика, для которой вы можете легко доказать это: "goal = a;").

Ваш ответ на вопрос