![]() |
Klassentyp a la Union-Typ
Ergebnis der syntaktischen Analyse ist in der Regel ein abstrakter Syntaxbaum.
Dieser Syntaxbaum wird in nachfolgenden Durchläufen dekoriert, d.h. die Knoten werden mit Attributen versehen, in denen die für die weitere Verarbeitung notwendigen Informationen gesammelt werden. Dabei hängt der Typ des zugeordneten Attributs sowohl vom Knoten als auch vom jeweiligen Durchlauf ab. In den guten alten Zeiten verwendete man dann eben einen Union-Typ, in Pascal also
Delphi-Quellcode:
Nun könnte man für die TAttributeType_i natürlich Klassen einsetzen.
TYPE
TAttribute = RECORD CASE AttributeType: TAttributeType OF AttributeType0: (Type0: TAttributeType0); AttributeType1: (Type1: TAttributeType1); AttributeTypeN: (TypeN: TAttributeTypeN); END; Die Frage ist, kann man das eleganter lösen unter Verwendung des objektorientierten Paradigmas? Ich komme nicht so richtig weiter. Das Ganze soll ja auch leicht anpassbar an unterschiedliche Gegebenheiten sein. Wie würdet ihr so was angehen? |
AW: Klassentyp a la Union-Typ
Das wird klassischerweise über das "Besucher" (Visitor) Entwurfsmuster gelöst. Das Parsen von Quelltext mit verschiedenen Durchläufen ist quasi das Paradebeispiel dieses Musters.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz