In objektorientierten Sprachen ist es üblich, ASTs (Abstract Syntax Trees) mit einfachen Hierarchien (dem Composite-Muster) zu implementieren und sie über Besucher zu durchlaufen.
In funktionalen Programmiersprachen ist die Verwendung von Varianten / Summenarten und dann die Mustererkennung der richtige Ansatz.
C ++ bietet sowohl Vererbung als auch Boost.Variants. Ich habe mehrere AST-Hierarchien mit Vererbung geschrieben, aber ich würde gerne ein Feedback von Leuten bekommen, die den Variantenansatz benutzt hätten. Ich würde gerne wissen, welche die "beste" ist, in Bezug auf die Leistung (Zeit und Raum), sondern auch im Hinblick auf die Wartbarkeit (Leichtigkeit, Bäume zu erstellen und zu durchlaufen).
Ich bin besonders interessiert an Erfahrung mit der Implementierung von Hash-Consing (eine einzelne Kopie jedes gemeinsamen Teilbaums behalten), möglicherweise mit Boost.Flyweight.
Danke!
Tags und Links c++ abstract-syntax-tree boost-variant composite