antlr - 基于 yacc/bison/ANTLR 语法生成随机但仍然有效的表达式

标签 antlr bison yacc

是否可以?有什么可用的工具吗?

最佳答案

您可以使用任何允许您访问基本语法的系统来执行此操作。 ANTLR 和 YACC 会编译您的语法,因此您不再拥有它们。在ANTLR的情况下,语法已经变成了代码;你不会拿回来的。在 YACC 的情况下,您最终会得到包含语法本质的解析器表;如果您足够了解这些解析表以执行我在下面描述的操作,您就可以遍历这些解析表。

遍历一组明确表示的语法规则并随机选择扩展/派生是很容易的。根据定义,这将为您提供有效的语法。

它不会做的是让你得到有效的代码。这里的问题是大多数语言确实有上下文敏感的语法;大多数程序都是无效的,除非声明的标识符以与其声明和范围规则一致的方式使用。后者需要完整的语义检查。

我们的 DMS Software Reengineering Toolkit用于解析任意语言的代码 [使用语法],构建 AST,让您分析和转换这些树,最后漂亮地打印有效(句法)文本。 DMS 提供对语法规则和树构建工具的直接访问,因此生成随机句法树(和 pretty-print )非常容易。使用 DMS 也很难确保它们在语义上有效。但是,许多 DMS 的前端可以采用(随机)树并进行语义检查,因此至少您知道树在语义上是否有效。

如果它说“不”,你会怎么做仍然是一个问题。也许您可以以至少保证使用不一致的方式生成标识符名称,但我怀疑这将取决于语言。

关于antlr - 基于 yacc/bison/ANTLR 语法生成随机但仍然有效的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11187581/

相关文章:

debugging - ANTLR “Cannot launch the debugger. Time-out waiting to connect to the remote parser.”

c++ - 当我在 yacc 中引入一个 Action 时 Shift/Reduce 冲突

c - Yacc, union 结构指针

python - LALR 语法、尾随逗号和多行列表分配

c - 如何使用 yacc 解析 if/else 语句

java - 将ANTLR生成的class文件合并成一个jar文件

java - 正则表达式、ANTLR 或任何其他解决方案?

c++ - Bison 的错误 : request for member ‘charTokens’ in something not a structure or union

parsing - M4 "No such file or directory".Bison

antlr - 无法使用 ANTLR 解析 APL 符号