ANTLR 插件扩展了 Java 插件,以添加对使用 ANTLR 生成解析器的支持。

ANTLR 插件支持 ANTLR 版本 2、3 和 4。

用法

要使用 ANTLR 插件,请在您的构建脚本中包含以下内容

build.gradle.kts
plugins {
    antlr
}
build.gradle
plugins {
    id 'antlr'
}

任务

ANTLR 插件向您的项目添加了许多任务,如下所示。

generateGrammarSourceAntlrTask

为所有生产 ANTLR 语法生成源文件。

generateTestGrammarSourceAntlrTask

为所有测试 ANTLR 语法生成源文件。

generateSourceSetGrammarSourceAntlrTask

为给定源集的所有 ANTLR 语法生成源文件。

ANTLR 插件将以下依赖项添加到 Java 插件添加的任务中。

表 1. ANTLR 插件 - 额外的任务依赖项
任务名称 依赖于

compileJava

generateGrammarSource

compileTestJava

generateTestGrammarSource

compileSourceSetJava

generateSourceSetGrammarSource

项目布局

src/main/antlr

生产 ANTLR 语法文件。如果 ANTLR 语法按包组织,则 antlr 文件夹中的结构应反映包结构。这确保生成的源文件最终位于正确的目标子文件夹中。

src/test/antlr

测试 ANTLR 语法文件。

src/sourceSet/antlr

给定源集的 ANTLR 语法文件。

依赖管理

ANTLR 插件添加了一个 antlr 依赖配置,该配置提供了要使用的 ANTLR 实现。以下示例演示了如何使用 ANTLR 版本 3。

build.gradle.kts
repositories {
    mavenCentral()
}

dependencies {
    antlr("org.antlr:antlr:3.5.2")   // use ANTLR version 3
    // antlr("org.antlr:antlr4:4.5") // use ANTLR version 4
}
build.gradle
repositories {
    mavenCentral()
}

dependencies {
    antlr "org.antlr:antlr:3.5.2" // use ANTLR version 3
    // antlr "org.antlr:antlr4:4.5" // use ANTLR version 4
}

如果未声明依赖项,则将使用 antlr:antlr:2.7.7 作为默认值。要使用不同的 ANTLR 版本,请如上所述将相应的依赖项添加到 antlr 依赖项配置中。

贡献的扩展

antlrAntlrSourceDirectorySet

此源集的 ANTLR 语法文件。包含在 ANTLR 源目录中找到的所有 .g.g4 文件,并排除所有其他类型的文件。默认值是非空的。

约定属性(已弃用)

ANTLR 插件添加了一个约定属性。

antlrSourceDirectorySet

此源集的 ANTLR 语法文件。包含在 ANTLR 源目录中找到的所有 .g.g4 文件,并排除所有其他类型的文件。默认值是非空的。

此约定属性已弃用,并被上面描述的扩展所取代。

源集属性

ANTLR 插件将以下属性添加到项目中每个源集。

antlr.srcDirsSet<File>

包含此源集的 ANTLR 语法文件的源目录。可以使用任何隐式转换为文件集合的内容进行设置。默认值为 [projectDir/src/name/antlr]

控制 ANTLR 生成器进程

ANTLR 工具在派生进程中执行。这允许对 ANTLR 进程的内存设置进行细粒度控制。要设置 ANTLR 进程的堆大小,可以使用 AntlrTaskmaxHeapSize 属性。要传递其他命令行参数,请附加到 AntlrTaskarguments 属性。

build.gradle.kts
tasks.generateGrammarSource {
    maxHeapSize = "64m"
    arguments = arguments + listOf("-visitor", "-long-messages")
}
build.gradle
generateGrammarSource {
    maxHeapSize = "64m"
    arguments += ["-visitor", "-long-messages"]
}