gradle - 在gradle中使用包声明生成ANTLR4语法文件

标签 gradle antlr4

我尝试使用gradle antlr插件,但是遇到了几个问题。

我有一个名为wls.g4的语法文件:

grammar WlsScript;

@header {
   package hu.pmi.wls.antlr.ws;
} 

program
  : 'statementList'? EOF
  ;

// Several more grammar and lexer rules

(注意:我将statementList设置为关键字只是为了构成正确的语法而不包括整个语法。;-)

该文件位于/ src / main / antlr中(作为antlr生产语法文件的默认源文件夹)。

这是build.gradle的片段:
project('common') {

    apply plugin: 'antlr'

    dependencies {
       // Some dependencies

       antlr "org.antlr:antlr4:4.5"
    }
} 

当我使用generateGrammarSource gradle任务(来自antlr插件)来生成源文件时,它将在build/generated-src/antlr/main文件夹中生成文件,这是默认设置。

出问题了,它没有创建Java包的文件夹(在本例中为hu/pmi/wls/antlr/ws),因此源将错误地位于Eclipse中。

我的主要问题是如何强制任务以程序包结构的方式生成源文件? 换句话说,如何配置gradle任务以使用语法中的包声明?

谢谢!

最佳答案

我有完全相同的问题,我可以更改AntlrTask使用的outputDirectory来获取软件包名称。

generateGrammarSource {
    outputDirectory = new File("${project.buildDir}/generated-src/antlr/main/net/example".toString())
}

我发现没有简单的方法可以从文件中提取语法包,因此必须在任务中对其进行硬编码。

关于gradle - 在gradle中使用包声明生成ANTLR4语法文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642144/

相关文章:

java - 我怎样才能让 AspectJ 负载编织在 Gradle 上工作(特别是 libgdx 构建)

android - 在应用程序启动时突然收到 Firebase java.lang.IllegalAccessError

android-studio - 如何设置Gradle的缩进

java - 如何在属性文件中维护 Gradle 构建的项目和依赖项 jar 版本?

c++ - 如何在C++中获得Antlr 4规则名称?

java - 如何在 Antlr4 中为零参数函数编写语法

antlr - antlr4语法中 "~"运算符的意义

plugins - Gradle:首先从自定义插件运行任务

java - 无法为非组合语法中的字符串文字创建隐式标记 : '('

java - ANTLR 匹配标识符但不匹配保留关键字