2011-10-17 34 views
8

Bir kullanıcı tanımlı nesne üyelerinde kod tamamlamanın nasıl uygulanacağı hakkında bir örnek (XText'te) arıyorum. Görebildiğim kadarıyla, IScope'u kullanmam gerekiyor, ama bütün bu tellerin nasıl bir arada olduğu belli değil.Kapsamlı bir nesnenin Xtext örneği

trait'un kullanıcı tanımlı bir tür olduğu düşünüldüğünden, name. yazdığımda String içinde bulunan yöntemleri tam/doğrulamak için bir dilbilgisi oluşturmaya nasıl giderim?

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

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

Teşekkür

cevap

17

Bu yüksek olan kapsam belirleme benimsemeye yapmak zorunda ne gramer bağlıdır.

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

+0

Mükemmel, teşekkürler Christian tam olarak ihtiyacım olan kickstart;) –

+5

EMF ile ilgili olarak clueless gibi olanlar için DSL'nizi manuel olarak geçmeniz gerekiyorsa yararlı EcoreUtil.getObjectsByType'ı bulabilirsiniz. Çünkü başvurmak istediğiniz şey, get yöntemleriyle kolayca elde edilemez. Örneğin. Kapsamında ihtiyacınız olan heterojen nesneler koleksiyonlarınız var. – Bae

2

yılında: bize Burada konuyla ilgili bir blog dizisi bulabilirsiniz

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] "()" 
; 

gibi bir gramer ardından scopeprovider

public class MyDslScopeProvider extends AbstractDeclarativeScopeProvider { 

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

gibi görünecektir var diyelim Xtext'teki kitabım, "Xtext ve Xtend'e Etki Alanlarına Özel Diller Uygulaması", https://www.packtpub.com/application-development/implementing-domain-specific-languages-xtext-and-xtend, kapsam belirleme hakkında bir bölüm var "daha küçük" bir Java dili için (miras ile de ilgilenir). Örneklerin kaynaklarını burada bulabilirsiniz: https://github.com/LorenzoBettini/packtpub-xtext-book-examples