2013-03-16 40 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)* 

令也XOtherFeatureCall延长XExpression,以及部分是XExpressions的列表。

第二个问题:它是一个优先级操作符,意味着即使存在其他解析解决方案,也应该立即解析后面的内容。看到这个经典的例子:

if a 
    if b 
    do; 
    else 
    doelse; 

否则可以解析为内部if或外部if。当然,我们希望它在内部如果。设置的规则,如:

=>'else' else=ElseExpression 

强制语法尽快解析别的,因为它发现,而不是返回到可能消耗过多其他外治它。所以它解决了一个模棱两可的问题。