Error handling ANTLR语法-如何添加成员覆盖错误处理

Error handling ANTLR语法-如何添加成员覆盖错误处理,error-handling,antlr,antlr3,Error Handling,Antlr,Antlr3,我看到了一个有用的答案 然而,如果我的语法不正常,我似乎无法添加这些“@”规则。我的语法文件很简单: grammar Exp; options { output=AST; } program : includes decls (procedure)* main -> ^(SMALLCPROGRAM includes decls (procedure)* main) //AST - PROGRAM root ; //Lexer and Parser

我看到了一个有用的答案

然而,如果我的语法不正常,我似乎无法添加这些“@”规则。我的语法文件很简单:

 grammar Exp;
 options {
 output=AST;

 }

 program 
  : includes decls (procedure)*  main  -> ^(SMALLCPROGRAM includes decls (procedure)*    main) //AST - PROGRAM root
  ;

   //Lexer and Parser rules continue below as normal..tested thoroughly and works
但是,如果我尝试添加这些@规则中的任何一个,我会得到如下错误:

grammar file Exp.g has no rules
以及:

有人知道问题出在哪里吗?我只是想更改语法,这样当我从单独的主类运行它时(使用AntlStringStream等将输入传递给它),当出现语法问题时,它实际上会在主类中抛出一个错误,而不仅仅是说:

line 1:57 missing RPAREN at '{'       

在继续解析输入的其余部分之前。最终,我的主类应该拒绝解析语法定义的任何语法错误的输入,并且应该向用户报告错误。

您可能错误地掌握了节/块的顺序。确保它看起来像这样:

grammar Exp;

options {
  ...
}

tokens {
  ...
}

@parser::header {
  ...
}

@lexer::header {
  ...
}

@parser::members {

  ...
}

@lexer::members {
  ...
}
我猜您在
令牌{…}
块之前放置了
@member
@header
部分<代码>标记{…}应直接位于
选项{…}
之后


我还记得,某些3.x版本存在空节问题:请确保所有节中至少都有内容,否则请忽略空节。

谢谢。成功了。我添加了来自另一个问题的覆盖,我的主类现在捕捉到一个异常。但是抛出的异常信息不是很丰富:MismatchedTokenException(18!=49)如何获取:行1:57缺失的RPARE at'{“消息”是否有一种从覆盖中“提取”它的方法,或者有一种不同的覆盖方法?@Awoken,这里没有银弹。检查异常,相应地强制转换,并从异常中提取所需的信息。不过,我们不要使用这些小评论框进行广泛的问答。
grammar Exp;

options {
  ...
}

tokens {
  ...
}

@parser::header {
  ...
}

@lexer::header {
  ...
}

@parser::members {

  ...
}

@lexer::members {
  ...
}