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



我看到了答案如何在出现第一个错误时让ANTLR 3.2退出?这是有帮助的。

然而,我似乎无法在语法不出错的情况下添加这些"@"规则。我的语法文件很简单:

 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

和:

 Exp.g:0:1: syntax error: assign.types: org.antlr.runtime.EarlyExitException
 organtlrgrammarv3DefineGrammarItemsWalker.g: node from line 202:4 required (...)+ loop did not match anything at input ';'

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

line 1:57 missing RPAREN at '{'       

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

您可能有错误的部分/块的顺序。确保它看起来像这样:

grammar Exp;
options {
  ...
}
tokens {
  ...
}
@parser::header {
  ...
}
@lexer::header {
  ...
}
@parser::members {
  ...
}
@lexer::members {
  ...
}

我猜您在tokens { ... }块之前放置了一个@member@header节。tokens { ... }应直接出现在options { ... }之后

我还记得,某些3.x版本有一个空部分的问题:确保所有部分都至少有内容,否则省略空部分。

最新更新