当前位置: 首页 > 面试题库 >

Java中带有“ $”的ANTLR异常处理

姜业
2023-03-14
问题内容

对于我在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;之类的输入运行代码时,由于getNumberofSyntaxErrors()返回0,因此Java代码会打印出错误消息“解析成功”。

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中的异常处理(下),包括了带你了解Java中的异常处理(下)的使用技巧和注意事项,需要的朋友参考一下   今天继续讲解java中的异常处理机制,主要介绍Exception家族的主要成员,自定义异常,以及异常处理的正确姿势。 Exception家族   一图胜千言,先来看一张图。   Exception这是一个父类,它有两个儿子,IOException和RuntimeE

  • 本文向大家介绍Java 中的异常处理?相关面试题,主要包含被问及Java 中的异常处理?时的应答技巧和注意事项,需要的朋友参考一下  Java异常类层次结构图 在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大

  • 问题内容: 我目前正在学习如何正确执行自定义异常的过程,偶然发现了一个问题。每当我尝试利用引发此自定义异常的类的对象时,IDE的调试器(我使用的是IntelliJ想法)都会说“未处理的异常:InsertExceptionName()”。代码以简化的方式看起来像这样。在这种情况下,如果随机生成的数字<0.5,它将返回一个异常,否则返回一个数字,但不会这样做。我想念什么? -- -- 问题答案: 您是

  • 我正在使用Java的executor服务特性。我想了解设计视角。 如果其中一批出现问题,最好的处理方法是什么? 我正在创建固定线程池, 此外,我正在使用invokeall()调用所有返回未来对象的可调用对象。 我的设想是 > 我有1000条来自xml文件的记录,我想保存到DB中。我创建了10个批次,每个批次包含100条记录。 批次开始处理(例如batch1、batch2、batch3…batch1

  • 问题内容: 如果我在.NET中没有记错的话,可以为未处理的异常注册“全局”处理程序。我想知道Java是否有类似的东西。 问题答案: 是的,有,但只有在没有设置时才会触发。

  • 主要内容:异常简介,异常类型很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况。例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家。但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊游提前回家。“天降大雨”是一种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。 计算机程序的编写也需要考虑处理这些异常情况。 异常(exception)是在运行程序时产生的一种异