从ScalaCheck中的语法生成字符串

从ScalaCheck中的语法生成字符串,scala,code-generation,parser-generator,quickcheck,scalacheck,Scala,Code Generation,Parser Generator,Quickcheck,Scalacheck,在Scala中,我使用Parser Combinators库实现了一个语法。现在,我要做的是从解析器组合器库中生成给定语法的随机字符串 在我看来,ScalaCheck库所做的某种程度上与解析器组合器相反,因为它组合了生成器而不是解析器 是否已经有一种方法可以使用解析器组合器或ScalaCheck生成字符串,或者有一种直接的方法可以将解析器组合器转换为生成器?没有直接的方法可以将语法转换为生成器。您必须手动编写它们。这并不难,因为你已经有了语法。您可以轻松地测试解析器,但测试类型检查器可能会有很大

在Scala中,我使用Parser Combinators库实现了一个语法。现在,我要做的是从解析器组合器库中生成给定语法的随机字符串

在我看来,ScalaCheck库所做的某种程度上与解析器组合器相反,因为它组合了生成器而不是解析器


是否已经有一种方法可以使用解析器组合器或ScalaCheck生成字符串,或者有一种直接的方法可以将解析器组合器转换为生成器?

没有直接的方法可以将语法转换为生成器。您必须手动编写它们。这并不难,因为你已经有了语法。您可以轻松地测试解析器,但测试类型检查器可能会有很大的问题(但仍然有可能)。开始之前,请确保可以相互比较AST节点

  • Scalacheck允许您生成递归属性,因此您可以 轻松生成AST节点
  • 生成AST节点后,可以使用Scalacheck和 关于空白及其柔顺性的一些补充知识 在节点之间,转换为字符串
  • 然后,您可以将生成的字符串提供给解析器 测试代码并将其与预生成的AST进行比较