有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    解析器和lexer是独立的。您不能从解析器引导lexer。因此,要么跳过所有空格,要么不跳过,并且必须在每个规则中显式地处理它们(lexer+解析器)

    如果你的解决方案真的需要特殊的空间处理等,比如重新定义你想要解析的语言(如果你有能力的话),那么最好考虑一下你的解决方案

    更新:

    从你在问题中的改变来看,似乎你在问如何在字符串中保留空格,这就是为什么Bart建议创建一个特定的lexer规则,其中包括外部引号和可能的空格。但是,您应该将WS-rule移动到远离语法的位置,以便它不会从其他规则中“窃取”空白。WS-rule通常是lexer语法中最后的规则之一(因为语法文件中的顺序很重要)