微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何忽略ANTLR4中的其余语句

如何解决如何忽略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匹配?

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。