在 Antlr4 中基于每个解析器规则忽略空格

Ignoring whitespace on a per-parser-rule basis in Antlr4

我的语法必须在大多数情况下忽略空格,但在某些上下文中除外。 的答案建议定义特定的词法分析器规则来处理我想要的异常。

问题是(我认为)我无法在词法分析器级别处理此类情况,因为它们似乎在解析器级别被触发得很高。

更具体地说:我想识别类似

的东西
MyRule:
   MyParseTree1 Operator MyParseTree2 // WS is skipped
   | MyParseTree1 WS SensitiveOperator WS MyParse // WS carries meaning

记住我有一个 WS -> skip 规则,因为在我的大部分语法中空格都应该被跳过。

Xtext 中,规则可以在规则范围内指定在规则范围内应用哪些隐藏标记:

MyRule (hidden COMMENTS):
  ... // WS reaches the parser, comments don't

MyRule2 (hidden WS, COMMENTS):
  ... // WS is skipped, comments too

但是我对antlr4一窍不通

如果你想根据语法上下文跳过某些 Tokens 你应该看看这个问题 here 其中给定的过程被描述为跳过空格(如你所愿) ).