Frage

Ich habe eine AST über ANTLR generiert, und ich brauche es zu einem DLR-kompatibel umzuwandeln (Expression Trees). Allerdings scheint es, dass ich nicht Baummuster Matcher für diesen Einsatz als Ausdruck Bäume ihre Unterbäume bei Instanziierung müssen (was ich nicht bekommen kann). Welche Lösung wäre die Verwendung am besten für mich?

War es hilfreich?

Lösung

habe ich etwas sehr ähnlich vor einigen Jahren -. Ich habe keine DLR Struktur bauen, aber ich meine eigene Ausdrucksbaumstruktur aufgebaut, die auch die Argumente Bauzeit benötigt (Unveränderlichkeit zu erreichen)

Damals arbeitete ich mit ANTLR v2 - und ich muß zugeben, dass ich mit der neuen Version 3 Syntax nicht vertraut bin, und ich erinnere mich nicht jedes Detail darüber, wie ich es getan hätte damals - so Sie stattdessen die Bereitstellung mit einem vollständig ausgearbeitet Beispiel, werde ich versuchen, Ihnen nur meine Geschichte zu erzählen (nicht sicher, ob es für Ihr Problem gilt, auch!):

Zunächst einmal war es nicht nötig, meine Struktur zu bauen von AST. Jeder AST baut Regel zurückkehren kann ein Objekt neben dem AST-Knoten selbst: Ich habe nur ANLTR der AST-Builder als ein Fahrzeug verwendet. Der Rückgabewert kann dann für den Konstruktor als Argument in der äußeren Regel verwendet werden, und so weiter. So dass Struktur von unten nach oben für Sie automatisch erstellt!

IOW, bauen Sie die endgültige Struktur zugleich, dass der AST gebaut wird (der AST nur die Syntaxregeln gebaut wird, um sicherzustellen, und kann weggeworfen werden.) Dieser Ansatz ist sehr solide, und es ist sogar noch schneller als erstes Bau des AST, und dann, dass die Umwandlung! Aber es nutzt noch die Kraft des AST-Parsers (im Gegensatz zu nur den normalen Parser / Lexer mit allein). Und wenn Sie den AST benötigen, auch -. Nur speichern Sie es irgendwo

Wenn aber wollen Sie einen fertigen AST gehen - ich denke, Sie jede programmatische Routine verwenden können, das zu tun - nur um sicher zu machen, dass es von unten nach oben arbeitet, um Ihr Ergebnis zu konstruieren

!

Hope, das hilft in gewisser Weise!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top