相关疑难解决方法(0)

处理ANTLR4中的错误

解析器不知道该怎么做的默认行为是将消息打印到终端,如:

第1:23行丢失DECIMAL at'}'

这是一个好消息,但在错误的地方.我宁愿接受这个作为例外.

我已经尝试过使用了BailErrorStrategy,但这会抛出ParseCancellationException没有消息(由a引起InputMismatchException,也没有消息).

有没有办法让我通过异常报告错误,同时保留邮件中的有用信息?


这就是我真正想要的 - 我通常在规则中使用动作来构建对象:

dataspec returns [DataExtractor extractor]
    @init {
        DataExtractorBuilder builder = new DataExtractorBuilder(layout);
    }
    @after {
        $extractor = builder.create();
    }
    : first=expr { builder.addAll($first.values); } (COMMA next=expr { builder.addAll($next.values); })* EOF
    ;

expr returns [List<ValueExtractor> values]
    : a=atom { $values = Arrays.asList($a.val); }
    | fields=fieldrange { $values = values($fields.fields); }
    | '%' { $values = null; }
    | ASTERISK { $values = values(layout); }
    ;
Run Code Online (Sandbox Code Playgroud)

然后当我调用解析器时,我做了类似这样的事情:

public …
Run Code Online (Sandbox Code Playgroud)

java error-handling antlr4

70
推荐指数
3
解决办法
3万
查看次数

标签 统计

antlr4 ×1

error-handling ×1

java ×1