0

我收到了一个废弃的专有 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-srcNameAST.java 文件中没有生成,导致编译时缺少符号错误。

我四处寻找,我唯一能找到的是buildAST应该设置的,而且确实 Name.g 包含以下内容。

options {
    buildAST=true;
    ...

我的语法文件src/main/antlr/pkgname按照文档存储,生成的代码最终在正确的位置。我无法共享语法文件,但由于我有一个工作 JAR 和提供的编译代码,我认为它们是正确的。

为什么 ANTLR 不生成 AST 文件?

build.gradleInteliJ 当前生成的文件如下所示

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"
}
4

0 回答 0