Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以指定一个特定的解析器规则来跳过空格吗?_Java_Antlr_Antlr4_Dsl - Fatal编程技术网

Java 我可以指定一个特定的解析器规则来跳过空格吗?

Java 我可以指定一个特定的解析器规则来跳过空格吗?,java,antlr,antlr4,dsl,Java,Antlr,Antlr4,Dsl,g4: 这意味着跳过所有的空格。但是在某些特定的情况下,我只需要一些规则在分析时跳过空格 我如何指定一个特定的解析器规则来跳过空格?谢谢你的评论 我更新了问题: g4: 我的文本: WS: [\r\n \t] -> skip; String:[a-zA-Z]+; stringline:'"' String '"'; 如您所见,我需要在跳过空格的情况下将“aaaa-bbb”重新命名为“stringline”,我怎么能这样呢?解析器和lexer是独立的。您不能从解析器引导lexer。因此,

g4:

这意味着跳过所有的空格。但是在某些特定的情况下,我只需要一些规则在分析时跳过空格

我如何指定一个特定的解析器规则来跳过空格?谢谢你的评论

我更新了问题:

g4:

我的文本:

WS: [\r\n \t] -> skip;
String:[a-zA-Z]+;

stringline:'"' String '"';

如您所见,我需要在跳过空格的情况下将“aaaa-bbb”重新命名为“stringline”,我怎么能这样呢?

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

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

更新:


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

一般来说,Mike是对的。然而,词汇模式可能有一些可能。但是您需要给出一个实际的问题示例。为什么不创建一个带引号的lexer规则:“
String:”“~[\r\n”]*'”;
?String:““~[\r\n”]*'”;WS:[\r\n\t]->跳过;看起来好像是冲突。哦…我明白了。我对这个理论有一个错误的认识。谢谢你的评论,BartOh…我明白了…谢谢你的建议,MikeEm……你有C++规则文件吗?你能给我一份拷贝吗?什么是C++规则文件?如果您想查看ANTLR lexer语法的示例,请查看语法库:。对于答案本身:你必须勾选答案左边的复选标记才能接受它。我勾选了你评论左边的向上箭头。包括之前的答案(我答应过)。不是箭头,我是指投票显示下方的复选标记。
WS: [\r\n \t] -> skip;
String:[a-zA-Z]+;

stringline:'"' String '"';
"aaaa bbbb"