2012-12-04 12 views
5

Używam xtext do wygenerowania edytora dla określonego języka. Używając edytora do mojego nowego języka, ma on wszystkie piękne funkcje xtext, takie jak uzupełnianie i kolorowanie kodu i tak dalej. To, co chciałbym móc zrobić, to wizualizować strukturę tekstu w moim edytorze.Wyświetlanie drzewa parsowania/modelu węzła/AST w tekście xtext

Wiem, że xtext ma wewnętrzne drzewo AST i drzewo parse (rozumiem, że nazywają to "modelem węzła") - czy istnieje sposób wizualizacji tego drzewa?

Odpowiedz

1

Powinieneś sprawdzić zarys treści. Spersonalizowałem moje, ale myślę, że domyślny odzwierciedla strukturę modelu.

1

Prostym rozwiązaniem w Xtend (oparte na introspekcji wykonanej domyślnie przez 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 
} 

Wyjście z wywołania takich jak zrzutu (someEObject, '') będzie zwrot:

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)