ANTLR 4 词法分析器规则跳过反斜杠和换行符的组合?

问题描述 投票:0回答:1

WS : [ \t]+ -> skip ; // skip spaces, tabs
通过阻止这些字符到达解析器来很好地忽略空白。我想对“/”和换行符对进行同样的操作。也就是说,反斜杠换行符像其他空白一样被删除,允许单个语句嵌入换行符。

我正在尝试各种变体

ESC_NEWLINE : '\\'NEWLINE ; NEWLINE :   '\r'? '\n'; WS : ([ \t]+ | ESC_NEWLINE) -> skip ;  
但这不会跳过 ESC_NEWLINE。我不知道该采取什么其他方法。

antlr4 lexical-analysis
1个回答
0
投票

当你这样做时:

ESC_NEWLINE : '\\' NEWLINE;
NEWLINE     : '\r'? '\n';
WS          : ([ \t]+ | ESC_NEWLINE) -> skip;

WS
规则永远不会匹配
ESC_NEWLINE
。 Lexer 规则按以下方式匹配:

  • 匹配尽可能多的字符
  • 如果 2 个(或更多)规则匹配相同数量的字符,则让第一个定义的规则“获胜”

这意味着输入

\\n
(斜杠 + 新行)将始终作为
ESC_NEWLINE
规则进行匹配,而绝不会作为
WS
规则进行匹配。

解决方案:让

ESC_NEWLINE
跳过自身:

ESC_NEWLINE : '\\' '\r'? '\n' -> skip;
WS          : [ \t]+ -> skip;
© www.soinside.com 2019 - 2024. All rights reserved.