2013-12-17 37 views
1

我需要的Xtext語法規則(或多個)的工作類似於以下內容:的Xtext多個交叉引用

1: CollectionGetElement: 
2: val=[VariableReference] '=' 
3: (ref=[List] | ref=[Bytefield] | ref=[Map]) 
4: '[' keys+=GetElementKeyType ']' ('[' keys+=GetElementKeyType ']')* ';'; 

5: GetElementKeyType: 
6: key=[VariableReference] | INT | STRING; 

像這樣unfortuantely這是行不通的,因爲3線,!

我也嘗試了3個獨立的規則(對於map,list和bytefield),但是然後解析器很難識別正確的規則(不可能)。然後

ListGetElement: 
    val=[VariableReference] '=' 
    ref=[List] 
    '[' key+=GetElementKeyType ']' ('[' key+=GetElementKeyType ']')* ';'; 
... same for the others 

錯誤是:

Decision can match input such as "RULE_ID '=' RULE_ID '[' RULE_ID ']' '[' RULE_ID ']' ';'" using multiple alternatives: 5, 6 
The following alternatives can never be matched: 6 

什麼是實現這一目標的最佳方式是什麼?

回答

3

有在你的語法兩個問題,

  1. 分配3種不同類型的分析部分ID

的屬性「裁判」

  • 產生3種不同類型的,我不知道該怎麼辦你想要做的。但是,我可以舉一個例子。希望它能幫助你。

    例如

    List: 
        'list' '(' elements += Element * ')'; 
    Map: 
        'map' '(' pairs += Pair * ')'; 
    GeneralDataType: 
        List | Map 
    CollectionGetElement: 
        val=[VariableReference] '=' 
        ref = GeneralDataType 
    ; 
    
  • +0

    謝謝,不知道爲什麼我沒有看到我自己 – user972851

    +0

    我也是,謝謝。 –