JavaCC在错误处理期间与正确的令牌不匹配

JavaCC在错误处理期间与正确的令牌不匹配,java,javacc,Java,Javacc,为了处理解析器中的问题,我在使用这个特殊的方法时遇到了一些问题。这是我用Java提供的代码: void handleErrors(Exception e, int kind, String strError) { //ParseException e = generateParseException(); System.err.println("Errore nel parsing: <" + strError + ">"); System.err.println(e.t

为了处理解析器中的问题,我在使用这个特殊的方法时遇到了一些问题。这是我用Java提供的代码:

void handleErrors(Exception e, int kind, String strError) {
  //ParseException e = generateParseException();
  System.err.println("Errore nel parsing: <" + strError + ">");
  System.err.println(e.toString());
  Token t;

  do {
    t = getNextToken();
  } while(t.kind != kind && t!=null && t.kind != EOF );
}
解析器应该抛出一个异常,告诉我函数声明有问题,但它只给出一般性建议,如:

ParseException: Encountered <EOF> at line 1, column 18.
Was expecting one of:
    "If" ...
    "For" ...
    "While" ...
    "Do" ...
    "Switch" ...
    "Func" ...
    "Return" ...
    "EndFunc" ...
    "Const" ...
    <VARNAME> ...
    <NAMEFUNC> ...

它应该告诉我只有EndFunc丢失,没有其他标记

根据日志判断,对我来说,似乎根本没有调用您的方法。该方法被正确调用,因为如果我取消对代码System.err的注释。。它向我展示了错误解析:handleErrors从哪里调用?它是从.jj文件中的代码调用的吗?如果是这样的话,你应该给我们看看相关的产品。顺便说一下,代码t.kind!=善良&善良=null看起来不正确,因为第二个conjunct的计算结果永远不会为false。您还说它应该告诉我,只有EndFunc丢失,而不是其他标记。如果您编写代码来生成这样的消息,那么您还没有向我们展示它。JavaCC generatedgenerateParseException方法计算所有合法下一个令牌的集合。我不知道AutoIt,但是,很明显,如果EndFunc是唯一合法的下一个令牌,那么它就不是一种非常有用的语言。
ParseException: Encountered <EOF> at line 1, column 18.
Was expecting one of:
    "If" ...
    "For" ...
    "While" ...
    "Do" ...
    "Switch" ...
    "Func" ...
    "Return" ...
    "EndFunc" ...
    "Const" ...
    <VARNAME> ...
    <NAMEFUNC> ...