2013-03-16 95 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 

強制語法儘快解析別的,因爲它發現,而不是返回到可能消耗過多其他外治它。所以它解決了一個模棱兩可的問題。