2013-03-16 1 views
0

나는 아래에서 발견 한 xtext 문법을 이해하려고합니다. 나는 두 가지 질문이 있습니다선택한 술어를 사용하는 xext 문법

  • XFeatureCall이 유형 XExpression하지만이뿐만 아니라 "XFeatureCall를 반환"{XFeatureCall}에 의해 기각되고 그래서 설정할 수를 반환이를? 아니면 실제로 이렇게 할 필요가 있습니까?
  • 줄 8과 14는 "=>"로 시작합니다. 이 "선택된 술어"또는 지금까지 내 관심을 끌지 못한 다른 것입니까? xtext 문서에서 선택한 술어의 변형을 찾을 수 없습니다. 그래서 나는 그 적용에 대한 설명을 높이 평가할 것이다.

xtext 문법 :

StaticEquals:':='; 
XFeatureCall returns XExpression: 
    // Same as Xbase... 
    {XFeatureCall} 
    (declaringType=[JvmDeclaredType|StaticQualifier])? 
    ('<' typeArguments+=JvmArgumentTypeReference (',' typeArguments+=JvmArgumentTypeReference)* '>')? 
    (feature=[JvmIdentifiableElement|IdOrSuper]|'class') 
    (=>explicitOperationCall?='(' 
     (
      featureCallArguments+=XShortClosure 
      | featureCallArguments+=XExpression (',' featureCallArguments+=XExpression)* 
     )? 
    ')')? 
    =>featureCallArguments+=XClosure? 
    // ... Except with this additional optional clause that allows static members to be set with := operator 
    ({XAssignment.assignable = current} StaticEquals value = XAssignment)?; 

답변

0

첫 번째 질문은 : 사실이 경우 규칙은 XFeatureCall을 반환하지만 XFeatureCall는 슈퍼로 XExpression 있습니다. 당신이있는 경우에 예를 들어 유용

SomeRule: (parts+=XFeatureCall)* (parts+=XOtherFeatureCall)* 

하자도 XExpression을 확장 XOtherFeatureCall, 및 부품 XExpressions의 목록합니다.

두 번째 질문 :이 연산자는 우선 순위 연산자이며 다른 구문 분석 솔루션이 있더라도 다음 구문을 먼저 구문 분석해야 함을 의미합니다. 이 고전적인 예를 보자 :

그 밖의 경우에는 내부 if 또는 외부 if에 대해 구문 분석 될 수 있습니다. 물론 우리는 내부에서 그것을 원한다. 같은 규칙을 설정 :

=>'else' else=ElseExpression 

하는 대신 너무 다른 소비 할 수있는 외부 규칙에 반환하는 그것을 발견하자마자 다른 사람을 구문 분석 문법을 강제로. 따라서 모호성을 해결합니다.

관련 문제