我尝试使用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/