Генерировать синтаксически правильные предложения из грамматики Antlr - PullRequest
4 голосов
/ 12 декабря 2011

У меня есть Xtext / Antlr грамматика , которая анализирует подмножество coffeescript .У меня есть несколько тестовых случаев, но я подумал о том, чтобы выполнить другой вид теста:

  1. Создать случайные синтаксически правильные фрагменты из моей грамматики Antlr
  2. Передать эти фрагменты в исходный синтаксический анализатор coffeescript (call coffee -ne "the sentence")
  3. Проверьте, анализируется ли каждое предложение с помощью coffeescript

Таким образом, я могу убедиться, что мой синтаксический анализатор принимает правильное подмножество, и в некоторых случаях он не слишком разрешающий.Теперь я застрял с первым шагом.Как я могу генерировать предложения из моей грамматики Antlr (которая также интенсивно использует синтаксические предикаты)?Так что меня интересует противоположность синтаксического анализа предложения.

Я нашел несколько связанных попыток , но ответы вообще не используют Antlr, а пользовательскую грамматику в python, или в clojure , или в ruby ​​.Я бы предпочел рабочее решение, а не подсказку о том, как оно может быть реализовано.

1 Ответ

1 голос
/ 08 августа 2012

Нет, вы не можете этого сделать. Если вы посмотрите на код, в который компилируется ANTLR, то увидите, что это только распознаватель, а не генератор.

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

Или, если ваше подмножество coffeescript является очень маленьким, вы можете использовать метод генерации строк случайных токенов и отбрасывания всех строк, которые не анализируются.

...