Wow, nicht schlecht!
Vielleicht solltest du noch etwas zum Vereinfachen von Termen einbauen, wodurch Dinge wie "1*(((x)))" beseitigt werden.
Für eine Facharbeit hatte ich mal eine Klasse geschrieben (
math::Expression; Quelltext und Demoprogramm enthalten), die in der Lage war, simple Vereinfachungen vorzunehmen. Das war allerdings wesentlich schwerer zu implementieren als Ableiten...
Ein Fehler tritt bei mir auf: wenn ich das Programm starte, erhalte ich die Fehlermeldung "-6,5 ist kein gültiger Gleitkommawert.". Das liegt vermutlich daran, daß ich auf meinem Windows '.' als Dezimalseparator eingestellt habe. Vielleicht sollte sich dein Programm auch an die entsprechende Einstellung im
OS halten, sonst bekommt es Probleme auf Rechnern im nicht deutschsprachigen Raum. (Die globale Variable DecimalSeparator gibt den aktuellen Dezimalseparator an.)