我有一个语法,该语法分析词法分析器中的URI,然后在语法操作中从它们构造一个java.net.URL。该词法分析器可以接受可能不是合法URL的字符串,因此,如果抛出URISyntaxExceptions,我想智能地处理它们。
我是ANTLR 4的新手(但是花了一些时间在ANTLR 3上),只是想知道在4中处理此类异常的最佳实践。
这是语法的代码段:
iri returns [IRI term] :
IRIREF
{ $term = spt.getIRI($IRIREF.text); } |
prefixedName
;
“spt”是我用开始规则的参数设置的支持对象。方法“getIRI”可以抛出
java.net.URISyntaxException
。我想以一种优美的方式在规则中本地处理,终止解析(或执行其他操作),但是不知道在何处附加catch块。
最佳答案
documentation涵盖了捕获错误的基本知识以及错误策略的实现。 Definitive ANTLR 4 Reference详细介绍了这两个主题。
更新:
“规则”的实际语法规范(来自ANTLRv4Parser.g4)为
parserRuleSpec
: DOC_COMMENT?
ruleModifiers? RULE_REF ARG_ACTION?
ruleReturns? throwsSpec? localsSpec?
rulePrequel*
COLON
ruleBlock
SEMI
exceptionGroup
;
(在相关部分,这与ANTLRParser.g中的“规则”规范相同,后者是用于构建Antlr v4 jar中存在的编译器工具的实际语法。)
关于java - 在ANTLR4中处理自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673267/