在我的ANTLR4语法中,我想跳过空格,以使语法尽可能简单。为此,我使用词法分析器规则WS : [ trn]+ -> skip;
。
但是,输入中可能存在某些部分,其中空格很重要。一个例子是制表符分隔的表格,或者需要计算空格以找出哪个数字写在哪一列中的表格。
如果我能关闭跳过一些开始和结束符号(table{ ... }
)之间的空格,这将是完美的。可能吗?
如果没有,是否有其他解决方案可以根据上下文在不同的词法分析器规则之间切换?
看看使用词法模式的上下文敏感标记。在"最终的ANTLR 4"一书中对此进行了更深入的介绍 - 第12章。我想你应该能够用这个来做到这一点。
声明一个规则,该规则将更改为"跳过空格模式",然后返回到默认模式。
OPEN: '<' -> mode (SKIP_SPACES);
mode: SKIP_SPACES;
CLOSE: '>' -> mode (DEFAULT_MODE);
WS : [ trn]+ -> skip;