如何忽略ANTLR4中的其余语句

时间:2020-10-14 18:05:46

标签: 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时,是否可以在语法本身和/或错误策略中使用一些技巧来保证一次失败的block匹配?

1 个答案:

答案 0 :(得分:0)

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

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

遍历树时,您可以报告每个error_alt的解析错误。