我有两个解析器语法(让我们称之为A.g和B.g)。现在我想将语法B导入语法A.这是他们的两个语法的样子: GRAMMAR A:
parser grammar A;
options {
tokenVocab = testLexer;
}
import B;
@header {
package com.splendit.pli2uct;
}
rule
: ImpLexRule1 | subRule ;
GRAMMAR B:
parser grammar B;
@header {
package com.splendit.pli2uct;
}
subRule: ImpLexRule2 ;
但是当我从语法文件构建java Classes时(无论我是使用antlr ide还是使用antlr-maven-plugin)我都会收到以下错误:error(144):Bg:11: 2:重新定义标题动作
但是当我将标题定义留在B.g语法中时,生成的Java类会出错,因为文件开头有noch包定义。任何人都可以帮我解决这个问题吗?我真的不知道我做错了什么。
提前举手 哈德
答案 0 :(得分:1)
您的问题的解决方案可能是:
抛弃您的@header
定义。
使用ANTLR工具按命令构建.java
个文件:
java org.antlr.v4.Tool -package com.splendit.pli2uct
当你离开@header
时出错的原因是ANTLR工具结合了两个语法,所以它几乎与你把它放在一个文件中一样。
玩ANTLR,这是一个非常好的工具