Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Text als Code?? (https://www.delphipraxis.net/66947-text-als-code.html)

Ultraschmart 6. Apr 2006 21:39


Text als Code??
 
Hi Leute!

Ein Freund von mir programmiert mit mir an einem Programm, welches Funktionen in einem definierten Koordinatensystem, zoom und allem drum und dran zeichnen, integrieren, differenzieren, und bald auch ne ganze Kurvendiskussion kann. Es gibt nur

1 Problem:
Es ist zu langsam! Das Programm dröselt für jeden X-Wert die Funktion von neuem auf und berechnet den Y-Wert. Dabei wird der eingegebene Text interpretiert und mit nem Haufen von verschachtelten, rekursiven If-Schleifen und Funktionen der Y-Wert errechnet.

Nun meine Frage:
Ist es möglich, Teile eines Textes in einem Edit-Fenster direkt als "dynamischen" Quellcode an definierten Stellen einzusetzen?
Zum Beispiel: Edit1 zeigt: "power(x-2,2)" Jetzt will ich "power(x-2,2)" als Quelltext in Zeile sowieso einsetzen. Geht das??

Danke für eure Aufmerksamkeit!

Arthur

arbu man 6. Apr 2006 21:43

Re: Text als Code??
 
nein geht nicht wirklich sonst bräuchtest du ja kein Delphi mehr. Nim doch den JvIntepreter der ist schnell um PascalCode parsen.

Ultimator 6. Apr 2006 22:00

Re: Text als Code??
 
Wenn du allerdings nur einen Formelparser brauchst, kannst du in der Open-Source-/Freeware-Sparte suchen, dort gibts sehr schnelle kompilierende ;)

Nicodius 7. Apr 2006 06:16

Re: Text als Code??
 
wenn du einen guten parser machst ists auch sehr schnell. Am besten du suchst hier mal in der DP ;)


grüße Nico

Mavarik 7. Apr 2006 07:48

Re: Text als Code??
 
Und wenn Du keine Lust hast auf bestehendes zurück zu greifen, vielleicht hilft folgender Ansatz.

Das Verfahren nennt sich UPN (Umgekehrte-Polnische-Notation) woher auch immer der Name kommt...

Das ganze funktioniert über eine art Stack (Funktionsprinzip der Programmiersprache Forth).

Aus 3+4*5 wird dann erstmal 3 4 +
Als nächstest wir *5 in den Stack gepushed...

Und es entsteht - weil (Punkt vor Strichrechnung gilt)

3 4 + 5 *

Wenn Du das in (In diesem Fall von hinten nach vorne) auswertest....

case Get_Operator of

_Mul : begin
Get_Zahl(A);
Get_Zahl(B);
Push(A*B); // wieder auf den Stack... 3 20 +
end;

usw.. Somit erhälst Du problemlos eine Routine, die Deine Formel auseinander nehmen kann...

Frank :coder:

Hoff es hilft Dir weiter...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz