Создание грамматики парсера из выборочных данных - PullRequest
3 голосов
/ 21 октября 2011

Я искал вокруг, чтобы увидеть, что доступно, насколько помогает пользователям создавать грамматики.Существуют различные IDE, но ... они кажутся текстовыми редакторами, которые работают с самим файлом грамматики.Я ищу что-то, что работает от подхода, ориентированного на данные.Итак, допустим, у меня есть много примеров данных, которые я хочу проанализировать с помощью синтаксического анализатора.Итак, я хочу проработать этот пример данных и определить грамматику непосредственно из него.

Существует ли какое-либо программное обеспечение, которое делает что-то подобное?

Я собираюсь попытаться быть болееясно ...

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

В отличие от большинства IDE, которые я вижу, существуют только текстовые редакторы для записи в грамматикесам язык.

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

Любой конечный набор строк составляет обычный язык. Это просто написать NFA, принимающий такой язык. Исходя из этого, вы можете сгенерировать DFA, используя конструкцию подмножества, и минимизировать его, используя тот факт, что DFA требуется только одно состояние для каждого класса эквивалентности отношения неразличимости. Таким образом, это полностью алгоритмический процесс ... получение регулярных выражений и / или грамматики тогда аналогично просто.

При этом, если вы хотите сгенерировать грамматику, которая генерирует строки и, возможно, другие ... ваша проблема кажется некорректной. Для любого конечного набора строк бесконечное число грамматик генерирует их и другие строки ... бесконечность числа, исходя из того факта, что вы можете генерировать любые другие строки, до тех пор, пока вы нажмете целевой набор данных. По сути, ваш вопрос: «учитывая начало последовательности a1, a2, ..., an, ..., скажите, каковы следующие n элементов». Это невозможно сделать, если вы просто не хотите получить некоторый ответ ... в этом случае вы всегда можете начать с DFA и предложить способы обобщить это (т. Е. Только принимать больше строк).

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

1 голос
/ 22 октября 2011

Я не думаю, что вы хотите ограничить это FSA, а скорее грамматикой (независимо от контекста или нет).Я предлагаю посмотреть на http://en.wikipedia.org/wiki/Grammar_induction; там, кажется, есть некоторые обсуждения алгоритмов (извините, не программного обеспечения).

...