【发布时间】:2018-05-13 13:16:54
【问题描述】:
我正在从事一个学校项目,我需要生成符合 Java 语言规范的 Java 代码。到目前为止,我已经能够随机生成具有不遵循语言规则的有效语法的 Java 代码。
接下来,我必须能够检查生成的代码是否遵守语言规则。遵循这一点的最佳方法是什么?我应该编写检查语言规则是否得到遵守的代码吗?是否有可用的 API(Prolog?)允许我对这些规则进行编码并将它们应用到代码中?
我认为我不能使用 Java 编译器 API,因为它违背了作业的目的。您将如何实现这一目标?
编辑:该项目不需要我考虑整个 Java 语言规范。我可以考虑规则的一个子集。
【问题讨论】:
-
根据定义,验证 Java 代码的唯一方法是实现该语言的解析器。这是一项从头开始开发的艰巨任务。
-
Jim Garrison 请阅读我的编辑。
-
请展示一个“具有有效语法”但不“遵循语言规则”的程序示例?您必须定义“语言规则”的含义。如果您所说的“语言规则”与程序语义有关,那么您就进入了 NP-Complete 领域。
-
我的意思是生成的代码包含 Java 语言结构。代码是使用 Java BNF 生成的。但是,JLS 有一些规则,例如:最终变量不能重新初始化。此类规则需要在生成的代码中检查。
-
这涉及到编译器所做的相同的流分析。您需要为您选择的任何语言子集编写编译器。您正在寻找一种不存在的神奇简单解决方案。
标签: java prolog java-compiler-api