根据上下文跳过 ANTLR v4 中的空格

skipping whitespace in ANTLR v4 depending on context

在我的 ANTLR4 语法中,我一般会跳过空格,以使语法尽可能简单。为此,我使用词法分析器规则 WS : [ \t\r\n]+ -> skip;.

但是,输入中的某些部分可能需要空格。一个示例是制表符分隔的表格,或者需要计算空格以找出在哪一列中写入了哪个数字的表格。

如果我可以关闭跳过某些开始和结束符号 (table{ ... }) 之间的空白,这将是完美的。可能吗?

如果没有,是否有其他解决方案可以根据上下文在不同的词法分析器规则之间切换?

看看具有词法模式的上下文敏感标记。在 "The Definitive ANTLR 4" 书 -- 第 12 章中对其进行了更深入的介绍。我认为您应该能够通过它完成它。

声明一个规则,该规则将更改为 "skip spaces mode",然后恢复为默认规则。

OPEN: '<' -> mode (SKIP_SPACES);

mode: SKIP_SPACES;
CLOSE: '>' -> mode (DEFAULT_MODE);
WS : [ \t\r\n]+ -> skip;