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'을 얻습니다. 그렇다면 필자는 수작업으로 선택적 키워드와 심지어 화이트 스페이스를 포함한 문자열을 수동으로 평가해야 할 것입니다. 이것은 Xtext/ANTLR/... :-)로 밀고 자하는 성가신 부분입니다. –
열거 형과 같지 않습니다. 예를 들어 Xtend를 코드 생성에 사용하면 구문 분석시 전체적으로 얻을 수 있습니다. 코딩 할 때 직접 열거 형만큼 편리하지 않을 수도 있지만 열거 형을 얻을 수 있기 때문에 백그라운드에서 열거 형을 파싱하는 것과 같습니다. 또한 앞면에있는 String과 같지 않습니다. Intellisense는 가입 규칙 중 하나를 따르고 규칙에 따라 코드가 완성 될 것으로 기대합니다. 그래도 정확한 열거 형이 아닐 것입니다. –
생성/처리에 _only_ Xtend를 사용하면 원래의 문법을 사용할 수 있고 플래그와 열거 형 사이의 매핑을 편리한 확장으로 캡슐화 할 수 있습니다. 귀하의 제안은 유사하지만 문자열 처리를위한 원래 불리언의 처리와 관련이 있습니다. 이 시점에서 부울은 이미 문자열보다 높은 값의 표현이므로이 점을 고려하지 않았습니다. –