Antlr:导入语法 - 重新定义标头错误

时间:2013-10-14 11:37:51

标签: import antlr grammar antlr3

我有两个解析器语法(让我们称之为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包定义。任何人都可以帮我解决这个问题吗?我真的不知道我做错了什么。

提前举手 哈德

1 个答案:

答案 0 :(得分:1)

您的问题的解决方案可能是:

  • 抛弃您的@header定义。

  • 使用ANTLR工具按命令构建.java个文件:

    java org.antlr.v4.Tool -package com.splendit.pli2uct

当你离开@header时出错的原因是ANTLR工具结合了两个语法,所以它几乎与你把它放在一个文件中一样。

玩ANTLR,这是一个非常好的工具