Мне дали архив заброшенной проприетарной кодовой базы Java, которая использует ANTLR 2.7.6 для генерации лексера, парсера и AST.В архиве есть папка, которая содержит среди прочего
- Name.g
- NameAST.class
- NameAST.java
- NameLexer.класс
- NameLexer.java
- NameLexer.smap
- NameParser.class
- NameParser.java
- NameParser.smap
То, что я пытаюсь сделать, это заменить вручную сгенерированный код ANTLR и некрасивые сценарии сборки на аккуратный проект Gradle.Поэтому я поместил файлы .g в свой проект и включил плагин Gradle ANTLR .
Однако, когда я запускаю сборку Gradle, в build/generated-src
файл NameAST.java не генерируется., приводя к пропущенным ошибкам символов при компиляции.
Я искал вокруг, и единственное, что я могу найти, это то, что должен быть установлен buildAST
, и действительно, Name.g содержит следующее.
options {
buildAST=true;
...
Мои файлы грамматики хранятся в src/main/antlr/pkgname
согласно документации, и сгенерированный код оказывается в правильном месте.Я не могу поделиться файлами грамматики, но так как у меня есть рабочий JAR и предоставленный скомпилированный код, я предполагаю, что они правильные.
Почему ANTLR не генерирует файлы AST?
The 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"
}