我有以下类似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
匹配?
答案 0 :(得分:0)
您可以尝试使用以下语法:
block: statement+;
statement: assignment | empty_statement | error_alt;
assignment: /* more assignment stuff */ ';';
empty_statement: ';';
error_alt: ~';'+ ';'
遍历树时,您可以报告每个error_alt
的解析错误。