저는 Xtext를 사용하고 있으며 다음 두 가지 문제에 대한 제안이 필요합니다.이 xtext 문법을 가장 잘 쓰는 방법
문제 # 1
내가 세 A, B 및 C 규칙이 있다고 할 수 있습니다. 그리고 b와 c가 한 번만 나타나야 만한다는 것을 제외하고는 이러한 규칙의 순서를 허용하려고합니다. 그런 문법을 쓰는 가장 좋은 방법은 무엇입니까?
root:
a+=a*
b=b
a+=a*
c=c
a+=a*
;
a: 'a';
b: 'b';
c: 'c';
루트 문법을 쓸 수있는 더 나은 방법이 있나요 : 여기
내가 생각 해낸 무엇인가? b와 c는 여전히 엄격한 순서로 이루어져야하는데 이상적인 것은 아닙니다.
문제 # 2
가지고이 문법을 살펴 그러나
a {
b {
}
c {
y {
}
}
}
x {
y {
z {
the_end {}
}
}
}
: 같은 아래 언어를 쓸 수 있도록 내가 예상이 문법을 사용
root:
any+=any*
x=x
any+=any*
;
any:
name=ID
'{'
any+=any*
'}'
;
x:
name='x' '{' y=y '}'
;
y:
name='y' '{' z=z '}'
;
z:
name='z' '{' any+=any* '}'
;
, 노드 "y"가 "c"아래에 나타나는 오류가 발생합니다. 왜 그런가요? 이제는 "y"가 규칙 중 하나에서 터미널로 사용 되었기 때문에 문법의 다른 곳에서는 사용할 수 없기 때문입니까?
이 문법을 수정하는 방법은 무엇입니까? 문제 # 1
예 답변을 게시 한 후에도 그렇게 생각했지만 더 이상 추구하지 않고 vaildators를 사용하기로 결정했습니다.그것은 더 나은 선택 같았다. 나는 그것을 시도 할 수 없을지라도 나는 옳은 것처럼 보이기 때문에 대답을 받아 들일 것입니다. –