2017-05-17 46 views
0

如何捕捉词法分析器中的异常?在解析器如果规则失败(或不匹配与给定的输入流)ANTLR的会抛出异常,我们可以轻易地捕获这个exception.Catch在Antlr3.Ref词法分析器异常:Error handeling in antlr 3.0 ...在词法分析器中捕捉异常Antlr3

attribute : 
     Value1 integer1["Value1"] { System.out.println("Accepted"); } 
    | Value2 integer2["Value2"] { System.out.println("Accepted"); } 
    ; 
catch[Exception e] {System.out.println("General error Reported");} 

它将parser.But工作,我如何能赶上在词法分析器本身?.Say在我有喜欢

str:STRING|DIGIT; 

和词法STRING的规则解析器异常被定义为

STRING : ('"' 'a'..'z' '"'); 

我的输入流是“上帝”....如果我想念双引号或者如果我把额外的双引号,那么我希望这个异常应该在词法分析器本身...有没有什么方法可以做到这一点?可能吗?

回答

0

覆盖一个或多个以下的方法来使用ANTLR自己的异常处理(这适用于词法和语法分析器)的 - 注意,这仅适用于敏感菌引起的输入失配例外:

  • emitErrorMessage() - 处理该消息是如何显示给用户
  • getErrorHeader() - 改变错误消息报头是如何创建的
  • getErrorMessage() - 改变如何错误的描述创建
  • displayRecognitionError() - 改变是如何创建的消息从异常,或彻底改变异常是如何处理的

ANTLR的词法和语法分析器之间的主要区别是,在词法分析器,没有开始规则或“电流”规则 - 词法分析器试图并行地匹配所有可用的规则。因此,如果发生不匹配,它不能归因于任何特定的规则(因此它也不能在使用catch块的任何特定规则中处理)。