ANTLR4:如何 disable/enable 跳过规则中的空格?

ANTLR4: How to disable/enable skip of the whitespaces in the rule?

我有这样的语法:

grammar SearchQuery;

queryDeclaration                        : predicateGroupItem predicateGroupItemWithBooleanOperator* ;
predicateGroupItemWithBooleanOperator   : groupOperator predicateGroupItem ;
predicateGroupItem                      : LEFT_BRACKET variable variableDelimiter
                                                expression expressionWithBoolean* RIGHT_BRACKET ;

variable                                : VARIABLE_STRING ;
variableDelimiter                       : VAR_DELIMITER  ;

expressionWithBoolean                   : boolOperator expression ;

expression                              : value ;

value                                   : polygonType;

boolOperator                            : or
                                        ;

or                                      : OR ;

groupOperator                           : AND ;

polygonType                             : POLYGON LEFT_BRACKET pointList (POLYGON_DELIMITER pointList)* RIGHT_BRACKET ;
longType                                : LONG ;
doubleType                              : DOUBLE ;

pointList                               : point
                                        | LEFT_BRACKET point ( POLYGON_DELIMITER point)* RIGHT_BRACKET
                                        ;

point                                   : latitude longitude ;

latitude                                : longType
                                        | doubleType
                                        ;

longitude                               : longType
                                        | doubleType
                                        ;

POLYGON                                 : [pP] [oO] [lL] [yY] [gG] [oO] [nN] ;


LONG                                    : DIGIT+ ;

DOUBLE                                  : DIGIT+ '.' DIGIT*
                                        | '.' DIGIT+
                                        ;

AND                                     : [aA] [nN] [dD] ;
OR                                      : COMMA
                                        | [oO] [rR]
                                        ;

VARIABLE_STRING                         : [a-zA-Z0-9.]+ ;
COMMA                                   : ',' ;
POLYGON_DELIMITER                       : ';' ;
VAR_DELIMITER                           : ':' ;

RIGHT_BRACKET                           : ')' ;
LEFT_BRACKET                            : '(' ;

WS                                      : [ \t\r\n]+ -> skip ;

fragment DIGIT                          : [0-9] ;

问题是我需要禁用全局跳过点规则中的空格,因为我什么时候会用这样的值测试这样的语法

(Location: POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)))

我会这样获取visitor中polygonType的值

POLYGON((3010,4040,2040,1020,3010))

如您所见,所有点都没有空格...

感谢未来的回答。

正如 rici 已经评论的那样:数字没有粘在一起。如果您在解析器上下文中调用 toString()getText()(或类似的),它将只是 return 自身的字符串表示形式。此字符串表示将不包含空格,因为词法分析器会跳过这些空格。

上下文将有单独的数字标记。它不会有包含输入 3010 的标记,但会包含 2 个标记:3010

在您的访问者中设置断点并亲自查看。