我有一个语法,它解析词法分析器中的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 块。
该文档涵盖了捕获错误的基础知识和错误策略的实现。 权威ANTLR 4参考更详细地涵盖了这两个主题。
更新:
"规则"的实际语法规范(来自ANTLRv4Parser.g4)是
parserRuleSpec
: DOC_COMMENT?
ruleModifiers? RULE_REF ARG_ACTION?
ruleReturns? throwsSpec? localsSpec?
rulePrequel*
COLON
ruleBlock
SEMI
exceptionGroup
;
(在相关部分,这与ANTLRParser.g中的"规则"规范相同,这是用于构建Antlr v4 jar中存在的编译器工具的实际语法。