代码之家  ›  专栏  ›  技术社区  ›  user1685095

antlr或其他工具能为给定的语法生成有效的代码吗?

  •  -1
  • user1685095  · 技术社区  · 6 年前

    所以房子看起来像

    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
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Mike Lischke    6 年前

    你所追求的似乎是一种特定语言的句子生成。例如,一段Java代码就是整个Java语言的一个句子。然而,由于递归和循环,给定语法的有效句子数实际上是无限的,即使对于非常基本的语法也是如此。因此,这是一个棘手的事情,我不知道有一个工具在做这件事,除了一个我自己写的(作为我的一部分 vscode ANTLR4 extension

    但是,您可以通过限制递归和迭代,将生成过程限制为完整语言的一个子集。然而,这里的一个重要方面是:什么是语言的良好表现?

    还有一点是:你不能用从语法生成的句子来测试这个语法,因为这总是成功的,因为句子是从语法中生成的,因此 有效。