我正在尝试实现包含SQL SELECT
查询的某些部分的DSL。
指定了两个表之间的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
语句。有没有合理的方法将枚举连接到语法的其余部分?
答案 0 :(得分:0)
你可以单独定义它们,但它可能不如enum那么优雅,尽管它是一种解决方法;
Join:
(joins += JoinType)+ // or however you wish
;
JoinTypes:
INNER_JOIN | LEFT_JOIN | RIGHT_JOIN | FULL_JOIN | CROSS_JOIN
;
然后定义你想要的每一个。
INNER_JOIN:
// whatever you want, optional keywords etc.
;
LEFT_JOIN:
...