2014-11-06 42 views
0

我有以下语法。 我的语法需要接受这些类型的语句:ANTLR4 - 空格作为分隔符

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

不,你不能使用SPACE令牌你的语法规则:它们跳过(从词法分析器丢弃)。

你可以做的是这样的:

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

我解决了编辑规则:

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

这像什么@BartKiers建议一样,只是没有那么紧凑(因此速度稍慢)。 – 2014-11-07 07:49:06

+0

当然,迈克! – 2014-11-18 16:41:02

相关问题