Symbolic Computation, Was für ein Klassendesign
-
Hallo C++ler,
ich versuche grade einen Matheparser zu bauen (der Parser tut auch), der bei der Berechnung genau vorgeht. Also zum Beispiel 2*Sin(2)*4 zu 8*Sin(2) umrechnet. Ich weiß allerdings nicht so genau welche Klassen ich am besten programmiere. Momentan habe ich einen ArbitraryPrecisionInteger, einen ArbitraryPrecisionRational und eine Symbol-Klasse. Wie sollten Interaktion zwischen den Klassen am besten implementiert werden (wenn zum Beispiel ein Bruch mit einem Integer multipliziert wird)?
Vielen Dank
-
Für symbolische Auswertung solltest du am besten intern einen Abstract Syntax Tree (AST) benutzen, auf dem du dann Knoten-Operationen (node operations) durchführst.
Etwas ähnliches habe ich bei meinen Matheparser (in C#) bei der Optimierung des Ausdrucks auch vorgenommen: Parser für mathematische Formeln.Arbeitest du denn nur mit ganzen Zahlen (aber dann macht die Sinus-Funktion ja keinen Sinn)? Jede ganze Zahl (Integer) kannst du aber doch generell als Bruch (X/1) interpretieren, so daß du nicht zwei verschiedene Repräsentationen benötigst.