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

Import Antlr:导入语法-重新定义标头错误,import,antlr,grammar,antlr3,Import,Antlr,Grammar,Antlr3,我有两个解析器语法(我们称它们为A.g和B.g)。现在我想将语法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 c

我有两个解析器语法(我们称它们为A.g和B.g)。现在我想将语法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插件),我得到了以下错误:error(144):B.g:11:2:头操作的重新定义

但是,当我将头定义保留在B.g语法中时,生成的Java类有一个错误,因为在文件的开头有noch包定义。有人能帮我解决这个问题吗?我真的不知道我做错了什么

提前付款
Bernhard

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

  • 扔掉你的
    @标题
    定义

  • 使用ANTLR工具通过命令生成
    .java
    文件:

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

当您将
@header
保留在中时出现错误的原因是,ANTLR工具将这两个语法组合在一起,因此它与将其放在一个文件中几乎相同

享受ANTLR的乐趣,它是一个非常好的工具