XText를 사용하여 DSL을 작성하는 데 어려움이 있습니다. 우리는이 같은 뭔가를 구문 분석한다고 가정하자XText 룩어 힌드가있는 DSL
A {
B, //this comma is needed
C,
D {E}, //comma is optional after a closing curly brace
F {G}
H
}
I,
J
그것은 모델 클래스의 목록이 들어있는 유형 모델 및 클래스로 표현되어야한다.
는 내가 현재 가지고 할 것은 :
Model: (classes += Class)*
Class: name = ID ('{' (subclasses += Class) (',' subclasses += Class)* '}')?
이 클래스는 쉼표로 구분해야하는 경우, 그들로부터 독립적 인 서브 클래스를 가지고 여부를 작동합니다. 그러나 클래스는 중괄호로 묶인 하위 클래스를 가질 수 있으므로 닫는 중괄호 뒤에 쉼표는 필수 항목이 아닙니다. 내가 포함하는 규칙을 참조 할 수없는 생각 때문에, 클래스 내부 클래스 규칙 참조가 작동하지 않습니다
Class: ID (',' Class | '{' subclasses += Class '}' ','? Class)?
:
는이 나는 다음과 같은 표현 문법이 필요 의미합니다. 내가 볼 수없는이 문제에 대한 간단한 해결책이 있다고 나는 믿는다.
편집 : 나는 lookbehind가 해결책이 될 것이라고 믿습니다. 그러나 XText에서 지원되지 않는 것 같습니다.
을 시도 할 수 있습니다 ? –
방금 한 번만 'ClassAtEnd'를 옵션으로 사용하고 다른 시간은 사용하지 말라고 말씀 드리고 싶습니다. –
좋은 캐치, 당신은 맞습니다 –