Funktions-Tabelle |
Top Previous Next |
Beispiele > Java > Funktions-Tabelle
Mit dem Funktions-Tabellen-Assistenten kann nun ein Gerüsst zur Auswertung des Parse-Baums erzeugt werden.
Wer die folgenden Schritte nicht im einzelnen nachvollziehen möchte, kann das fertige Ergebnis des Funktions-Tabellen-Assistenten auch direkt laden:
...\TextTransformer\Beispiele\Java\JavaCopy.ttp
Wenn sie sich den Parse-Baum im Variablen-Inspektor angesehen haben, erkennen sie, dass der Baum aus Verzweigungen besteht deren Label die Namen von Produktionen sind. Für jedes Token gibt es einen Knoten mit dem Label: IgLit. Nun soll eine Funktions-Tabelle erzeugt werden, die Funktionen zur Behandlung Knoten aller Label enthält. Für das Kopierprogramm sind vor allem die IgLit-Knoten wichtig, da in den beiden Unterknoten der gesamte Eingabetext vorhanden ist. Die Produktions-Knoten können alle gleich behandelt werden: sie dienen als Zwischen-Station bei der Iteration zu den IgLit-Knoten. Es werden also insgesamt nur zwei Funktionen benötigt:
Default-Funktion zur Behandlung der Produktions-Knoten IgLit-Funktion zur Behandlung der IgLit-Knoten
Wählen sie auf der Start-Seite des Funktions-Tabellen-Assistenten: Neue Tabelle erzeugen. Damit kommen sie auf die zweite Seite, deren Felder ausgefüllt werden sollten wie angezeigt:
Auf der nächsten Seite wählen sie : Funktion für ein einzelnes Label Auf der nächsten Seite schreiben sie das Label: IgLit Auf der nächsten Seite schreiben sie den Funktions-Namen: CopyIgLit und den Namen für die Default Funktion: CopyDefault.
Als Default-Funktion wählen sie iterate auf der nächsten Seite.
Diese Funktion dient der Iteration zu den IgLit-Knoten. Auf der nächsten Seite wählen sie value und ändern den Text:
{{ node pos = xnNode.firstChild(); out << pos.value(); pos = pos.nextSibling(); out << pos.value(); }}
Diese Funktion gibt beide Text-Teile eines IgLit-Knotens aus.
Nun kommen sie auf die letzte Seite und klicken auf Finish.
Mit dem Cancel-Schalter können sie den Assistenten nun schließen. Auf der Seite für die Klassenelemente können sie nun sehen, das eine Funktions-Tabelle und zwei Funktionen eingefügt wurden.
Das Kopier-Projekt ist fast fertig. Leider gibt es einen Schönheitsfehler. Der Baum-Assistent hat auf der Token-Seite nur Code zum Hinzufügen von Knoten für den Token-Text erzeugt, den ausgelassenen Text aber nicht berücksichtigt.. Deshalb müssen die Aktionen auf der Token-Seite noch manuell geändert werden in:
{{IgLit(xn, "LITERAL");}}
Das letzte, was noch zu tun bleibt, ist der Aufruf zur Baumauswertung. Sie können
"/* Breakpoint */"
in der Aktion am Ende von CompilationUnit ändern zu:
m_ftCopy.visit(n);
Wenn sie das Projekt ausführen, wird der Java-Quelltext in das Zielfenster kopiert.
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |