Wegen einer Wette ('Wer schreibt den schnellsten Formelparser') dachte ich mir:"Ich mach mir das Leben leicht" und schrieb also ein kleines Tool, das beliebige Funktionen ausführt. Das ist ja an sich nicht Tolles, da es hier sehr viele und auch gute Ansätze für Skriptinterpreter gibt. Meine Lösung hat den Vorteil, das es sich 100% an die Delphi-Syntax hält, garantiert alle Sprachkonstrukte unterstüzt und auch 100%ig genauso schnell wie Delphi ist. Die Lösung ist vollkommen unabhängig von der verwendeten Delphi-Version.
Super, oder? Wie ich das mache? Popeleinfach: Ich erzeuge aus dem Usercode einen
DLL-Sourcecode, jage den durch den Delphi-Compiler, linke die fertige
DLL zur Laufzeit ein und rufe die Funktion dann auf. Alles aus dem laufenden Delphi-Tool heraus.
Diese Lösung (na ja, die Machbarkeitsdemo) hat aber einige Nachteile, die man jedoch leicht umgehen kann:
1. Den DBCC kann man nicht weitergeben. Abhilfe: Den FreePascal-Compiler verwenden (wenn der DLLs erzeugen kann)
2. Die Demo kann nur eine Funktion F(X) erzeugen. Das kann man aber leicht erweitern, indem man den Funktionskopf mit angeben muss.
3. Die Demo unterstüzt keine Schnittstellen zu Variablen. Das ließe sich aber auch noch implementieren.
4. Die Anzeige von Syntaxfehlern ist nicht implementiert. Könnte man aber durch Analyse des DBCC-Outputs realisieren.
Im Sourcecode muss noch der Pfad zum Delphi-Kommandozeilenkompiler hinterlegt werden (i.a. im Bin-Verzeichnis, jedenfalls bei D6)
Ich poste das eigentlich nur, weil mein Wettgegner Bauklötze gestaunt hat
. Er hat nämlich wirklich wochenlang an einem Parser gebastelt. Ich meine, als Denkanstoss für eigene Lösungen sollte das hier reichen. Leider hab ich keine Zeit mehr, diese Lösung (mit einem freien Compuler) in mein
DB-Tool einzubauen (das mit DWS arbeitet).
[edit] LMDMüll rausgeschmissen, war überflüssig [/edit]