ANTLR4 - 空格作为分隔符

时间:2014-11-06 18:07:43

标签: parsing antlr hidden ignore channel

我有以下语法。 我的语法需要接受这些陈述:

X IN(10,20,30)

X IN(10 20 30)

expr
   : expr IN '(' constant_list ')'  #InExp
    ;

constant_list
    : constant ((',') constant)*
    ;

constant
    : numeric_constant
    | character_constant
    ;

SPACE
    : [ \t\r\n] -> skip
    ;

我只是尝试将规则constant_list编辑为:

constant_list
    : constant ((','|SPACE) constant)*
    ;

但这些空间被忽略了。我该如何处理这种情况?我需要使用隐藏频道吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

不,您不能在解析器规则中使用SPACE令牌:它们被跳过(从词法分析器中丢弃)。

你能做的是:

constant_list
 : constant (','? constant)*
 ;

答案 1 :(得分:0)

我解决了编辑规则的问题:

constant_list
    : constant (',' constant)*
    | constant ( constant)*
    ;