2014-11-06 102 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

相關問題