Autor Beitrag
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 20.01.06 13:00 
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, und unterstützt immer die jeweilige 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.
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 :shock: . 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 Compiler) in mein DB-Tool einzubauen (das mit DWS arbeitet).
Einloggen, um Attachments anzusehen!
_________________
Na denn, dann. Bis dann, denn.