antlr4 在 .g4 语法文件上工作正常,但 gradle generateGrammarSources 在同一文件上失败,出现 TokenStreamException: unexpected char: '-'/"
antlr4 works fine on a .g4 grammar file, but gradle generateGrammarSources fails on the same file with TokenStreamException: unexpected char: '-'/"
我正在试验 gradle 的 antlr 插件,并尝试为我的语法生成一些源文件。使用 ANTLR Mega 教程作为指南。当我通过终端在语法上手动 运行 antlr4 工具时,它会成功并生成 *.java、*.tokens 和 *.interp 文件。我试图通过 gradle 插件生成这些文件并收到错误
“> ANTLR 恐慌:TokenStreamException:意外字符:'-'”。
我是否希望 gradle generateGrammarSources 具有与 运行直接在我的语法上使用 antlr 命令等效的功能?
语法文件基于 Antlr 的示例之一:https://github.com/antlr/grammars-v4/blob/master/arithmetic/arithmetic.g4
user-MBP:antlr user$ antlr4
ANTLR Parser Generator Version 4.7.2
user-MBP:main-project user$ ls src/main/antlr/
arithmetic.g4
user-MBP:antlr user$ antlr4 arithmetic.g4
user-MBP:antlr user$ ls
arithmetic.g4 arithmetic.tokens arithmeticLexer.interp arithmeticLexer.tokens arithmeticParser.java
arithmetic.interp arithmeticBaseListener.java arithmeticLexer.java arithmeticListener.java
Gradle 执行相同操作的代码:
apply plugin: 'antlr'
...
dependencies {
...
compile group: 'org.antlr', name: 'antlr4-runtime', version: '4.7.1'
...
}
// as the .g4 grammar file is already present in src/main/antlr, not // explicitly specifying any package directory
运行 gradle 命令
user-MBP:main-project user$ gradle generateGrammarSource --stacktrace
Caused by: java.lang.RuntimeException: ANTLR Panic: TokenStreamException: unexpected char: '-'
at antlr.Utils.error(Utils.java:34)
at antlr.Tool.fatalError(Tool.java:445)
at antlr.Tool.doEverything(Tool.java:280)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
我希望上面的 gradle 命令能够成功 运行 并在 build/ 目录中生成等效的源文件,但是它失败了。
我缺少在 gradle 依赖项中生成语法的 antlr 工具。 ANTLR 有两个组件:
- 用于从语法生成词法分析器和解析器的工具(antlr 依赖项)
- 运行生成源文件所需的运行时间(antlr4-运行时间)
在我的 gradle 依赖项中添加以下行解决了问题。
dependencies {
...
antlr "org.antlr:antlr4:4.7.1"
...
}
我正在试验 gradle 的 antlr 插件,并尝试为我的语法生成一些源文件。使用 ANTLR Mega 教程作为指南。当我通过终端在语法上手动 运行 antlr4 工具时,它会成功并生成 *.java、*.tokens 和 *.interp 文件。我试图通过 gradle 插件生成这些文件并收到错误 “> ANTLR 恐慌:TokenStreamException:意外字符:'-'”。
我是否希望 gradle generateGrammarSources 具有与 运行直接在我的语法上使用 antlr 命令等效的功能?
语法文件基于 Antlr 的示例之一:https://github.com/antlr/grammars-v4/blob/master/arithmetic/arithmetic.g4
user-MBP:antlr user$ antlr4
ANTLR Parser Generator Version 4.7.2
user-MBP:main-project user$ ls src/main/antlr/
arithmetic.g4
user-MBP:antlr user$ antlr4 arithmetic.g4
user-MBP:antlr user$ ls
arithmetic.g4 arithmetic.tokens arithmeticLexer.interp arithmeticLexer.tokens arithmeticParser.java
arithmetic.interp arithmeticBaseListener.java arithmeticLexer.java arithmeticListener.java
Gradle 执行相同操作的代码:
apply plugin: 'antlr'
...
dependencies {
...
compile group: 'org.antlr', name: 'antlr4-runtime', version: '4.7.1'
...
}
// as the .g4 grammar file is already present in src/main/antlr, not // explicitly specifying any package directory
运行 gradle 命令
user-MBP:main-project user$ gradle generateGrammarSource --stacktrace
Caused by: java.lang.RuntimeException: ANTLR Panic: TokenStreamException: unexpected char: '-'
at antlr.Utils.error(Utils.java:34)
at antlr.Tool.fatalError(Tool.java:445)
at antlr.Tool.doEverything(Tool.java:280)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
我希望上面的 gradle 命令能够成功 运行 并在 build/ 目录中生成等效的源文件,但是它失败了。
我缺少在 gradle 依赖项中生成语法的 antlr 工具。 ANTLR 有两个组件: - 用于从语法生成词法分析器和解析器的工具(antlr 依赖项) - 运行生成源文件所需的运行时间(antlr4-运行时间)
在我的 gradle 依赖项中添加以下行解决了问题。
dependencies {
...
antlr "org.antlr:antlr4:4.7.1"
...
}