Ich implementiere eine einfache C-ähnliche Sprache in OCaml und, wie üblich, AST ist meine Zwischencode-Darstellung. Da ich einige Traversale am Baum machen werde, wollte ich ein Besuchermuster implementieren, um den Schmerz zu lindern. Mein AST folgt derzeit die Semantik der Sprache:OCaml Besuchermuster
type expr = Plus of string*expr*expr | Int of int | ...
type command = While of boolexpr*block | Assign of ...
type block = Commands of command list
...
Das Problem ist jetzt, dass Knoten in einem Baum von einem anderen Typ sind. Idealerweise würde ich an die Besuchsprozedur eine einzelne Funktion übergeben, die einen Knoten behandelt; Die Prozedur würde den Typ des Knotens einschalten und die Arbeit entsprechend ausführen. Jetzt muss ich für jeden Knotentyp eine Funktion übergeben, die nicht als beste Lösung erscheint.
Es scheint mir, dass ich (1) wirklich mit diesem Ansatz gehen kann oder (2) nur einen einzigen Typ oben habe. Was ist der übliche Weg, um das zu erreichen? Vielleicht OO benutzen?
Können Sie den Typ angeben, den Ihre Funktion haben soll? –