Java 如何让antlr语法识别带有空格的字符串?

Java 如何让antlr语法识别带有空格的字符串?,java,parsing,grammar,antlr4,Java,Parsing,Grammar,Antlr4,我正在试着用antlr4写语法。但我不能有选择地忽略规则中的空白。附上我的语法。在这里,如果标记与alphaNumericWSC匹配,我应该允许一个空格(空白的标记),但在所有其他地方,我希望跳过空白 WHITESPACE : [ \t\n\r]+ -> skip alphaNumericWSC : AlphaNumeric (',' AlphaNumeric)* | AlphaNumeric (' ' AlphaNumeric)*

我正在试着用antlr4写语法。但我不能有选择地忽略规则中的空白。附上我的语法。在这里,如果标记与alphaNumericWSC匹配,我应该允许一个空格(空白的标记),但在所有其他地方,我希望跳过空白

WHITESPACE  :   [ \t\n\r]+ -> skip
alphaNumericWSC : AlphaNumeric (',' AlphaNumeric)* 
                | AlphaNumeric ('  ' AlphaNumeric)*
                ;
换句话说,我不想只忽略alphaNumericWSC规则中的空格


提前感谢您的帮助。

给定的lexer空格规则将在到达解析器之前使用所有空格。因此,如果空格对解析器很重要,就不要使用它

ANTLR提供lexer模式,可用于在空白敏感和不敏感源区域之间切换。模式确实需要识别一些可用于在模式之间切换的明确源特征

所以问题是
字母数字(''字母数字)*
什么时候有效。如果有特别适用的标记,比如
:=
前导和
尾随例如,定义模式:

alphaNumericWSC : AlphaNumeric (Comma AlphaNumeric)* 
                | AlphaNumeric (WS AlphaNumeric)*
                ;


AlphaNumeric  : AlphaNum ;
Mark          : ':=' -> pushMode(WSS);
Semi          : ';'  ;
Comma         : ','  ;
WHITESPACE    :   [ \t\n\r]+ -> skip;

mode WSS;
WS            : ' '+ ;
AlphaNumeric2 : AlphaNum -> type(AlphaNumeric);
Semi2         : ';'      -> type(Semi), popMode();
WHITESPACE2   : [\t\n\r]+ -> skip;

fragment AlphaNum : .... ; 

您应该为字符串使用词法规则,
string:'“~'”
(注意不带空格的“'is'”)。ANTLR的lexer的贪婪性将完成此任务。空格用于lexer,而不是解析器。