0

我有两个解析器语法(我们称它们为 Ag 和 Bg)。现在我想将语法 B 导入到语法 A。这是他们两个语法的样子: 语法 A:

parser grammar A;

options {
   tokenVocab = testLexer;
}

import B;

@header {
  package com.splendit.pli2uct;
}
rule
  :  ImpLexRule1 | subRule ;

语法 B:

parser grammar B;


@header {
  package com.splendit.pli2uct;
}
subRule: ImpLexRule2 ;

但是当我从语法文件构建 java 类时(无论我是使用 antlr ide 还是使用 antlr-maven-plugin),我收到以下错误:error(144): Bg:11:2: redefinition标题动作

但是当我在 Bg Grammar 中保留 header 定义时,生成的 Java 类会出错,因为文件开头没有 noch 包定义。有人可以帮我解决这个问题吗?我真的不知道我做错了什么。

提前感谢伯恩哈德

4

1 回答 1

1

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

  • 扔掉你的@header定义。

  • .java通过命令使用 ANTLR 工具构建文件:

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

离开时出现错误的原因@header是 ANTLR 工具结合了这两种语法,因此几乎与将其放在一个文件中一样。

玩得开心,ANTLR,它是一个非常好的工具

于 2013-10-14T15:45:17.030 回答