내 DSL 변수가 동적인데, 이는 처음 값이 할당 될 때 생성됩니다. 그래서이 유효한 코드는 다음과 같습니다Xtext 문법을 사용하여 동적 변수를 처리하십시오.
a = 0
b = 2 // new variable created
a = 3 // existing variable reassigned
내 순진 접근 방식은 "2를 다음과 같은 대안이 일치 될 수 없다"불평, 그것은 작동하지 않습니다이
Identifier:
ID; // ID from Terminals
Assignable:
{Assignable} ref=[Identifier|ID] |
{Assignable} newVar=Identifier;
같은 규칙을 가지고하는 것입니다. 생성 된 ANTLR 디버그 문법 규칙을 포함하고 있기 때문에 그것은 이해할 수 :
ruleAssignable: ruleIdentifier | ruleIdentifier;
([Identifier|ID]
의 비결은 question on cross-referencing에 대한 응답에서 온다 난 그냥 또한이 해결 어떻게 grok 수하려고 :) 완전히 이해없이 복사됩니다.
{XAssignment} /* (declaringType=[types::JvmDeclaredType] '::')? */ feature=[types::JvmIdentifiableElement|ValidID] OpSingleAssign value=XAssignment
상호 참조 만 사용하는 것처럼 보이고 새로운 변수 선언을 처리하는 방법을 볼 수 없습니다.
그것은 coffeescript의 기존 문법이므로 변경할 수 없습니다. 나는 당신의 답을 통해 상호 참조를 사용하는 것이 더 쉽고, 할당 문맥에서 오류 메시지를 사용하지 못하게한다는 인상을받습니다. –
그래, 그 일은 덜한 것 같다. –