1
我試圖實現一個包含SQL SELECT
查詢的某些部分的DSL。SQL JOIN子句:用一個Enum替換一堆標誌
兩個表之間的JOIN
語法被指定(例如,用於PostgreSQL)所示:
// one of theese:
[ INNER ] JOIN
LEFT [ OUTER ] JOIN
RIGHT [ OUTER ] JOIN
FULL [ OUTER ] JOIN
CROSS JOIN
注意可選的關鍵字。
以下的Xtext語法作品(排序):當然
Join:
'INNER'? inner?='JOIN'
| left?='LEFT' 'OUTER'? 'JOIN'
| right?='RIGHT' 'OUTER'? 'JOIN'
| full?='FULL' 'OUTER'? 'JOIN'
| cross?='CROSS' 'JOIN'
;
模型推理將創建一批不能很好地處理後旗。
我真的想是一個枚舉這樣的:
enum JoinType: INNER_JOIN | LEFT_JOIN | RIGHT_JOIN | FULL_JOIN | CROSS_JOIN;
我想一個枚舉,因爲:
- 發電機等。可以使用簡單的
switch
聲明。 - 可選關鍵字和嵌入空白的處理是語法工作。
是否有任何合理的方法將該枚舉連接到其餘的語法?
使用你的語法,我得到一個具有'EString'類型的特性'連接'的EClass'Join'。然後,我將不得不手動評估字符串,包括可選關鍵字,甚至可能是whitepspace。這正是我想要推送到Xtext/ANTLR/...的煩人的部分:-) –
它不像枚舉,但例如,如果您使用Xtend代碼生成,解析時可以得到整體。雖然在編碼時它可能不如直接枚舉那樣方便,但它就像在後臺解析枚舉一樣,因爲您可以獲得枚舉類型。它也不會像前面的字符串一樣。智能感知系統會期望您遵守一個加入規則,並且會根據您的規則完成代碼。但是,它不會像你想要的確切枚舉:) –
如果我將使用_only_ Xtend生成/處理,然後我可以使用我原來的語法,並將標誌和枚舉之間的映射封裝到一個方便的擴展。你的建議是相似的,但交易處理字符串處理原始布爾值。由於此時布爾值已經是比字符串更高的值,我不認爲這是一個好的處理。 –