Генерация строк из грамматики в ScalaCheck

В Scala у меня есть грамматика, реализованная с помощью библиотеки Parser Combinators. Теперь я хочу генерировать случайные строки с учетом грамматики из библиотеки комбинаторов синтаксического анализатора.

Мне кажется, что библиотека ScalaCheck делает это как-то противоположно Parser Combinators в том, что она комбинирует генераторы вместо парсеров.

Есть ли способ генерировать строки с помощью комбинаторов синтаксического анализатора или ScalaCheck, или есть простой способ преобразования комбинатора синтаксического анализатора в генератор?


person Felix    schedule 17.08.2015    source источник


Ответы (1)


Нет простого способа преобразовать вашу грамматику в генераторы. Вы должны написать их вручную. И это будет не так сложно, потому что у вас уже есть грамматика. Вы можете легко протестировать свой синтаксический анализатор, но тестирование вашей проверки типов может быть довольно проблематичным (но все же возможным). Прежде чем начать, убедитесь, что ваши узлы AST можно сравнивать друг с другом.

  • Scalacheck позволяет создавать рекурсивные свойства, поэтому вы можете легко создавать узлы AST.
  • Когда у вас есть сгенерированные узлы AST, вы можете использовать Scalacheck и некоторые дополнительные знания о пробелах и их совместимости между узлами, переведенные в строки.
  • Затем вы можете передать сгенерированные строки парсеру, вы собираетесь протестировать код и сравнить их с предварительно сгенерированным AST.
person ppopoff    schedule 13.12.2016