2011-10-17 12 views
8

मैं उपयोगकर्ता परिभाषित ऑब्जेक्ट सदस्यों पर कोड पूर्ण करने के तरीके को कैसे कार्यान्वित करने के लिए एक उदाहरण (XText में) ढूंढ रहा हूं। जहां तक ​​मैं देख सकता हूं मुझे आईस्कोप का उपयोग करने की ज़रूरत है, लेकिन यह सब कैसे एक साथ तारों को अस्पष्ट है।स्कोप्ड ऑब्जेक्ट का Xtext उदाहरण

यह देखते हुए कि trait एक उपयोगकर्ता परिभाषित प्रकार है, मैं String के अंदर मौजूद विधियों को पूरा/मान्य करने के लिए ग्रामर बनाने के बारे में कैसे जा सकता हूं जब मैं name. टाइप करता हूं?

trait String { 
    def toLowerCase(): String 
    def toUpperCase(): String 
} 

val name = new String() 
name.toLowerCase() 

धन्यवाद

उत्तर

17

यह अत्यधिक अपने व्याकरण आप scoping को अपनाने के लिए क्या करना है पर निर्भर करता है।

https://web.archive.org/web/20130129085620/http://blogs.itemis.de/stundzig/archives/773

+0

बहुत बढ़िया है, धन्यवाद ईसाई वास्तव में किकस्टार्ट मैं जरूरत;) –

+5

EMF के बारे में रूप में नहीं पता के रूप में मैं था उन लोगों के लिए, आप उपयोगी EcoreUtil.getObjectsByType मिल सकता है, तो आप स्वयं अपनी डीएसएल पार करने की जरूरत है क्योंकि आप जो संदर्भ देना चाहते हैं उसे प्राप्त विधियों के माध्यम से आसानी से प्राप्त नहीं किया जा सकता है। जैसे आपके पास विषम वस्तुओं का संग्रह है जिन्हें आपको गुंजाइश करने की आवश्यकता है। – Bae

2

में: हम कहते हैं कि आप की तरह

Model: 
    statements+=Statement+ 
; 

Statement: 
    Trait | VarDef | Call 
; 

Trait: 
    "trait" name=ID "{" 
     ops+=Operation* 
    "}" 
; 

Operation: 
    "def" name=ID "()" ":" type=[Trait] 
; 

VarDef: 
    "val" name=ID "=" "new" type=[Trait] "()" 
; 

Call: 
    var=[VarDef] "." op=[Operation] "()" 
; 

एक व्याकरण फिर अपने scopeprovider तरह

public class MyDslScopeProvider extends AbstractDeclarativeScopeProvider { 

    IScope scope_Call_op(Call call, EReference ref) { 
     return Scopes.scopeFor(call.getVar().getType().getOps()); 
    } 
}  

लगेगा आप विषय यहाँ पर एक ब्लॉग श्रृंखला ढूंढ सकते हैं Xtext पर मेरी पुस्तक, "Xtext और Xtend के साथ डोमेन-विशिष्ट भाषा कार्यान्वित करना", https://www.packtpub.com/application-development/implementing-domain-specific-languages-xtext-and-xtend, स्कॉइंग के बारे में एक अध्याय है एक "छोटी" जावा भाषा के लिए (विरासत के साथ भी व्यवहार)। आप यहाँ उदाहरण के स्रोतों को खोजने के कर सकते हैं: https://github.com/LorenzoBettini/packtpub-xtext-book-examples

संबंधित मुद्दे