java我可以指定一个特定的解析器规则来跳过空格吗?
g4:
WS: [\r\n \t] -> skip;
意思是跳过所有的空格。但在某些特定情况下,我只需要一些规则来在分析时跳过空格
如何指定特定的解析器规则来跳过空格?谢谢你的评论
我更新了问题:
g4:
WS: [\r\n \t] -> skip;
String:[a-zA-Z]+;
stringline:'"' String '"';
我的文本:
"aaaa bbbb"
如你所见,我需要在跳过空格的情况下将“aaaa bbb”重新命名为“stringline”,我怎么能这样呢
# 1 楼答案
解析器和lexer是独立的。您不能从解析器引导lexer。因此,要么跳过所有空格,要么不跳过,并且必须在每个规则中显式地处理它们(lexer+解析器)
如果你的解决方案真的需要特殊的空间处理等,比如重新定义你想要解析的语言(如果你有能力的话),那么最好考虑一下你的解决方案
更新:
从你在问题中的改变来看,似乎你在问如何在字符串中保留空格,这就是为什么Bart建议创建一个特定的lexer规则,其中包括外部引号和可能的空格。但是,您应该将WS-rule移动到远离语法的位置,以便它不会从其他规则中“窃取”空白。WS-rule通常是lexer语法中最后的规则之一(因为语法文件中的顺序很重要)