JavaCC在错误处理期间与正确的令牌不匹配
为了处理解析器中的问题,我在使用这个特殊的方法时遇到了一些问题。这是我用Java提供的代码: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
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> ...