首页 > 解决方案 > 如何忽略ANTLR4中的其余语句

问题描述

我有以下类似 C 的文档:

  //...
  some_var = 4 + 3;           // 1.
  another_var = some var + 2; // 2.
  yet_another_var = 42;       // 3.
  ;                           // 4.
  //...

这个语法片段:

block: statement+;
statement: assignment | empty_statement;
assignment: /* more assignment stuff */ ';';
empty_statement: ';';

语句 2 包含错误;使用 DefaultErrorStrategy 会导致解析树看到语句 2,并在解析树中对其进行了一些修改。相反,我想报告错误,然后忽略语句的其余部分,将其视为empty_statement. statement或者,在尝试处理 a 时,我可以在语法本身和/或错误策略中使用一些技巧来解决单个失败的匹配block吗?

标签: antlr4

解决方案


您可以尝试使用以下语法:

block: statement+;
statement: assignment | empty_statement | error_alt;
assignment: /* more assignment stuff */ ';';
empty_statement: ';';
error_alt: ~';'+ ';'

在树遍历期间,您可以在每个error_alt.


推荐阅读