2012-12-04 9 views
5

Sto usando xtext per generare un editor per una lingua specifica. Quando si usa l'editor per il mio nuovo linguaggio, ha tutte le caratteristiche adorabili di xtext come il completamento del codice e la colorazione e così via. Quello che mi piacerebbe essere in grado di fare è visualizzare la struttura del testo nel mio editor.Visualizzazione dell'albero di analisi/modello di nodo/AST in xtext

So che xtext ha un AST interno e un albero di analisi (ho capito che lo chiamano un `modello nodo ') - c'è un modo per visualizzare questo albero?

risposta

1

Controllare la struttura del contenuto. Ho personalizzato il mio ma penso che quello predefinito rifletta la struttura del modello.

1

Una soluzione semplice a xtend (basato sulla introspezione fatto da default EObject.toString()):

def static String dump(EObject mod_, String indent) { 
    var res = indent + mod_.toString.replaceFirst ('.*[.]impl[.](.*)Impl[^(]*', '$1 ') 

    for (a :mod_.eCrossReferences) 
     res += ' ->' + a.toString().replaceFirst ('.*[.]impl[.](.*)Impl[^(]*', '$1 ') 
    res += "\n" 
    for (f :mod_.eContents) { 
     res += f.dump (indent+" ") 
    } 
    return res 
} 

Uscita da una chiamata, come discarica (someEObject, '') volontà ritorno:

ExpressionModel 
Variable (name: i) 
    Plus 
     IntConst (value: 1) 
     Plus 
      IntConst (value: 2) 
      Plus 
       IntConst (value: 3) 
Variable (name: j) 
    Plus 
     VarRef ->Variable (name: i) 
     Plus 
      IntConst (value: 4) 
      Plus 
       IntConst (value: 5) 
Problemi correlati