我收到了一个废弃的专有 Java 代码库的 tarball,它使用 ANTLR 2.7.6 来生成词法分析器、解析器和 AST。在 tarball 中有一个文件夹,其中包含其他内容
- 名称.g
- 名称AST.class
- 名称AST.java
- NameLexer.class
- NameLexer.java
- NameLexer.smap
- NameParser.class
- 名称解析器.java
- NameParser.smap
我想要做的是用一个整洁的 Gradle 项目替换手动生成的 ANTLR 代码和丑陋的构建脚本。所以我把 .g 文件放在我的项目中,并包含了Gradle ANTLR 插件。
但是,当我运行 Gradle 构建时,在build/generated-src
NameAST.java 文件中没有生成,导致编译时缺少符号错误。
我四处寻找,我唯一能找到的是buildAST
应该设置的,而且确实 Name.g 包含以下内容。
options {
buildAST=true;
...
我的语法文件src/main/antlr/pkgname
按照文档存储,生成的代码最终在正确的位置。我无法共享语法文件,但由于我有一个工作 JAR 和提供的编译代码,我认为它们是正确的。
为什么 ANTLR 不生成 AST 文件?
build.gradle
InteliJ 当前生成的文件如下所示
plugins {
id 'java'
id 'antlr'
id 'org.jetbrains.kotlin.jvm' version '1.3.11'
}
group 'Projectname'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
antlr "antlr:antlr:2.7.6"
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}