2012-02-16 82 views
0

我試圖創建一個語法,將解析如下:的Xtext列表或只有一個項目

reference: java.util.String 

但也

reference: {java.util.String, java.lang.Integer} 

換句話說,我希望它解析合格名稱的列表,但也只能解析一個項目(在本例中未用'{'標記)。

我想這是什麼:

Reference: 
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values+=QualifiedName); 

不過,我得到一個錯誤:,缺少「{」在'Java的使用參考的第一種形式的時候(不{)。任何建議,我應該嘗試?

編輯:還試圖

Reference: 
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | ((!'{')values+=QualifiedName); 

,但在輸入得到一個沒有可行的替代 '!'語法定義中的錯誤。編輯2:我沒有與「逗號分隔列表」的問題,我試了這個分離,它運作良好。我唯一的問題是基於'{'字符來區分規則的兩部分。

回答

8

這將這樣的伎倆:

Reference: 
'reference' ':' (
    '{' values+=QualifiedName (',' values+=QualifiedName)* '}' 
    | values+=QualifiedName 
); 

請介意precedencies的團體和替代品。

+0

太棒了,我現在明白了我錯了的地方:) – Deelazee 2012-02-16 12:07:59

0

我很新的的Xtext,所以只是給它一個嘗試:

Reference: 
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values=QualifiedName); 

Reference: 
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)+ '}') | (values=QualifiedName); 
+0

第一:無法將QualifiedName分配給值,因爲它與其他值的基數不同(在語法中出現錯誤)。第二:我需要列表是未定義的大小,所以+不適合(意味着0或1)。感謝您的嘗試。 – Deelazee 2012-02-16 10:13:31

相關問題