java - 在ANTLR4中处理自定义异常

标签 java error-handling 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块。

最佳答案

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/

相关文章:

python - 在处理异常时,如何打印出现的任何错误声明?请参阅下面的更多细节

java - 对主代码和测试代码使用antlr4-maven-plugin

parsing - 仅在 ANTLR 语法的一部分显式处理换行符

java - 如何编写 ANTLR 语法来解析纯文本文件

java - 将 ImageView 位图设置为返回的位图

meteor - throw Meteor.Error总是在error.error中返回403

java - CVE-2018-14667;为 RichFaces 3.X 生成有效负载

javascript - 为什么在 Node.js 中使用 async-await 时会丢失堆栈跟踪?

javascript - 如何禁用 Tapestry T 控制台?

java - 在 Scala 中使用通用数据类型值定义 Map