我正在实现一个 ANTLR 语法,其中我想完全忽略每个上下文中的空格(换行符除外)。鉴于此,我添加了以下规则:
WS: [ \t]+ -> skip ;
但是,当规则
fieldX: 'X:' INT NEWLINE;
尝试解析“X:1”时,我仍然收到以下错误:
extraneous input ' ' expecting INT
我的理解是,我收到此错误是因为 fieldX 是解析器规则,而我的 WS 规则仅对词法分析器规则有效。我在这里查看了一些类似的问题,我能找到的唯一具体解决方案是将 fieldX 转换为词法分析器规则。但是,我有许多类似的规则需要转换。除了将其转换为词法分析器规则之外,还有什么方法可以让解析器规则跳过空格吗?
正如 sepp2k 所建议的,我在语法中的其他地方有以下规则:
TEXT: .?+;
。我认为通配符不会与空格匹配,但它确实如此。通过将此规则移至我的 WS 规则之后,我能够解决该问题。