在 ANTLR4 中处理自定义异常



我有一个语法,它解析词法分析器中的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中存在的编译器工具的实际语法。

最新更新