我想为树保姆研究java语法,它似乎被放弃了几个月。使用基于属性的测试会很好,所以我考虑是否有一些工具可以以某种方式接受给定的语法,并用来生成随机的AST和代码。
所以这房子看起来就像
data OtherValidJavaAst = undefined
data TreeSitterAst = undefined
transform : TreeSitterAst -> OtherValidJavaAst
genAst : Gen OtherValidAst
genCode : OtherValidAst -> String
parseTreeSitter : String -> TreeSitterAst
parsesEqually : ValidJavaAst -> Boolean
parsesEqually ast = transform (parseTreeSitter (genCode ast)) == ast发布于 2019-01-13 09:30:41
你所追求的似乎是一种特定语言的句子生成。例如,一段Java代码是整个Java语言的一句话。然而,由于递归和循环,一个给定语法的有效句子的数量实际上是无限的,甚至对于非常基本的语法也是如此。因此,这是一件棘手的事情,而且我不知道有一个工具会这样做,除了我自己写的一个工具(作为我的vscode ANTLR4扩展的一部分),这个工具还在开发中。
但是,您可以通过限制递归和迭代,将生成过程限制在整个语言的子集上。然而,这里的一个重要方面是:什么是语言的良好表现?
这里的另一点也是:您不能使用从语法生成的句子来测试这个语法,因为这总是成功的,因为句子是从该语法生成的,因此必须是有效的。
https://stackoverflow.com/questions/54159852
复制相似问题