gpt4 book ai didi

java - ANTLR 异常处理 "$",Java

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:08 25 4
gpt4 key购买 nike

对于 ANTLR 中的语法,我的 java 代码可以捕获并打印包含“$”的输入的错误。在我的实现中,我需要打印出“成功”才能成功输入。所以,我在我的 java 代码中执行以下操作,

CharStream charStream = new ANTLRFileStream(filePath);
myLexer lexer = new myLexer(charStream);
TokenStream tokens = new CommonTokenStream(lexer);
myParser parser = new myParser(tokens);

/*if there is an error throws an exception message*/
parser.program();

/*if there is an error find how many, if 0 then print success,*/
int errorsCount = parser.getNumberOfSyntaxErrors();
if(errorsCount == 0){
System.out.println("parsing successful");
}

在我的例子中,如果输入错误,getNumberofSyntaxErrors 将返回大于 0 的数字。对于“int i;”,输出只是;

parsing successful 

当我为 int $i; 这样的输入运行代码时,java 代码打印出带有“解析成功”的错误消息,因为 getNumberofSyntaxErrors() 返回 0;

line 1:4 no viable alternative at character '$' /*this is what I expect to see*/
parsing successful /*this is not what i expect to see*/

最佳答案

词法分析器(或解析器)可能会尝试从(小)错误中恢复并继续标记或解析。如果您想在出现某些非法字符时终止,最简单的方法是创建某种“失败”规则,将其放置在所有词法分析器规则的末尾,如果上面的词法分析器规则都没有匹配,则该规则将匹配,并让该规则抛出异常:

grammar T;

// parser rules

// lexer rules

/* last lexer rules */
FALL_THROUGH
: . {throw new RuntimeException("Illegal character: " + getText());}
;

关于java - ANTLR 异常处理 "$",Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com