【背景】
之前已经折腾了:
【记录】尝试折腾antlr v3的异常处理和错误恢复:VARIABLE的CLASS的值INPUT故意写错为INPUT1
【记录】折腾antlr的异常处理:使得当初错时,输出更详细的错误信息,包含堆栈信息
此处,继续折腾,去研究antlr中的异常的类型。
【折腾过程】
1.之前在:
【记录】尝试折腾antlr v3的异常处理和错误恢复:VARIABLE的CLASS的值INPUT故意写错为INPUT1
已经提及了:
但是是针对于antlr v2的。不是我要的,当前主流的,我所用的antlr v3.
2.还是看作者的书:
The Definitive ANTLR Reference.pdf
中整理的比较全。
现提取整理如下:
ANTLR v3中的异常Exception的类型 | 含义 |
RecognitionException | antlr中所有异常的超类(superclass); 其所记录的内容包含:
|
MismatchedTokenException | 表明了,解析器,想要在当前输入位置,去找某个特定符号,但是却没有找到; 记录内容:
|
MismatchedTreeNodeException | 表明了树解析器想要找寻某个特定类型的符号的节点,但是却没有找到; 此处是针对于一个符号流解析器,去模拟不匹配的符号异常; 其记录:
|
NoViableAltException | 识别器,遇到一个判断节点decision point,但是往前继续匹配时,却没有遇到任何一个,和已有合法输入的内容有匹配的。 即,本来希望有哪几种输入,结果一种都没遇到,所以报错; 其记录:
|
EarlyExitException | 识别器遇到了,(..)+ EBNF的子规则,即必须有一个可选项存在,但是结果却没有匹配到; 其记录: 判断号(decision number)(但不记录状态号) 因为很明显,其不是处在前向DFA的中间,所以无需记录状态号 且忽略掉整个输入; |
FailedPredicateException | 一个验证语法预测,结果验证结果是失败false,则会引发此异常; 其记录:
|
MismatchedRangeException | 识别器尝试去匹配一个范围的符号,一般都是字符串,结果匹配不到; 其记录:
|
MismatchedSetException | 识别器尝试去匹配一组符号,但是没有匹配到; 其记录:
|
MismatchedNotSetException | 识别器,尝试去匹配一组元素的(用波浪号’~’去)取反的值,结果没有匹配到。 |
注:
1.上述的,记录内容,的意思是:当出现此类的异常,会记录下对应的和出错相关的各种信息。
【总结】
总体来说,antlr中的异常处理的分类和架构,还算是比较清晰的。
剩下的,只是自己遇到哪些错误,然后具体考虑如何处理的事情了。
转载请注明:在路上 » 【整理】antlr的Exception Handling异常处理中的异常Exception的类型