我正在尝试实现一个包含 SQLSELECT
查询某些部分的 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
语句。 - 可选关键字和嵌入空格的处理是语法工作。
有什么合理的方法可以将该枚举与语法的其余部分联系起来吗?