Delphi-PRAXiS
Seite 2 von 8     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Der HAM-Parser (https://www.delphipraxis.net/59668-der-ham-parser.html)

Daniel G 28. Dez 2005 10:42

Re: Der HAM-Parser
 
Zitat:

Zitat von Dax
Zitat:

Zitat von Daniel G
Ah, wunnerbar...

Wie gefällts? ;-)

Großartig! Samma', kann es sein, dass du Douglas Adams auch so gerne liest wie ich? :stupid:

Dax 28. Dez 2005 12:46

Re: Der HAM-Parser
 
Zitat:

Zitat von Daniel G
Großartig! Samma', kann es sein, dass du Douglas Adams auch so gerne liest wie ich? :stupid:

Das könnt sogar gut sein ;)

PS: Neue Version ist im ersten Beitrag. Irgendwie war da ein kleiner Fehler bei Operatoren, die unterschiedlichen Typs aber gleichen Namens sein sollten: Man konnt sie nicht registrieren. Aber jetzt gehts, das unäre Minus als Negator (:mrgreen:) ist jetzt auch in einer der Demos drin :)

Daniel G 28. Dez 2005 13:32

Re: Der HAM-Parser
 
Was genau bringt mir jetzt eigentlich die Möglichkeit, Plugins zu schreiben?

P.S.: Und was ist jetzt eigentlich mit meinem Namensvorschlag?

Dax 28. Dez 2005 13:37

Re: Der HAM-Parser
 
Zitat:

Zitat von Daniel G
Was genau bringt mir jetzt eigentlich die Möglichkeit, Plugins zu schreiben?

Die Plugins bieten eine einfache Möglichkeit, den Parser um eigene Funktionen zu erweitern. So hab ich zum Beispiel ein Plugin in Planung, das wie der ECQP den Ausdruck kompiliert. Natürlich kannst du mit Plugins auch andere Sachen machen, zum Beispiel ne eigene Variablenverwaltung oder jedes Vorkommen von "ä" im Ausdruck durch "ae" ersetzen :lol: Aber eigentlich ists zur Funktionserweiterung gedacht. Wenn jemand eine Idee hat, wo man noch mit Plugins ansetzen könnte, immer her damit :)

Zitat:

Zitat von Daniel G
P.S.: Und was ist jetzt eigentlich mit meinem Namensvorschlag?

Ich hab mich mittlerweile durchgerungen, doch Have another Maththingy zu benutzen.. Die Genauigkeit des Parser ist ja nach wie vor durch den verwendeten Datentyp beschränkt ^^

Dust Signs 28. Dez 2005 13:38

Re: Der HAM-Parser
 
Könntest du nicht auch eine EXE onlinestellen, damit man gleich testen kann, ohne Delphi anwerfen zu müssen? Thx

Dust Signs

Daniel G 28. Dez 2005 13:48

Re: Der HAM-Parser
 
Zitat:

Zitat von Dax
Aber eigentlich ists zur Funktionserweiterung gedacht. Wenn jemand eine Idee hat, wo man noch mit Plugins ansetzen könnte, immer her damit :)

Also z.B. ein Plugin, das mir die Ableitung (erste, zweite...) einer Funktion ermittelt?

Dax 28. Dez 2005 16:17

Re: Der HAM-Parser
 
Zitat:

Zitat von Daniel G
Also z.B. ein Plugin, das mir die Ableitung (erste, zweite...) einer Funktion ermittelt?

Klar ginge das :) Da der Parser intern den Ausdruck sowohl als Tokenstrom als auch als Baum speichert (wenn man ihn lässt), sollte das ohne Probleme gehen.

Als Beispiel den Baum für, sagen wir, 2*f(x^2) (nur die Node-Typen der einzelnen Teile des Baums):
Code:
ntVariable ntOperator ntFunction ntParameters
                                 +ntParameter
                                  +ntVariable ntOperator ntVariable
Auf diesen Baum kann man jetzt, nachdem der Baum erstellt wurde, voll zugreifen und nach gutdünken alles lesen und verändern, je nachdem was man vorhat. Den Presolver für diesen Parser wollte ich eigentlich als Plugin schreiben, und mit dem Baum dürfte das alles auch sehr einfach sein :)

edit: Rechtschreibfehler werden wieder einkassiert :mrgreen:

BlackJack 4. Jan 2006 12:08

Re: Der HAM-Parser
 
hey das teil sieht ja mal ganz interessant aus. kann der parser auch formeln kompilieren?

p.s.: ich schreibe ja im moment an meinem raytracer, und jetzt bin ich gerade dabei, mit XML einen parser dafür zu basteln. meinst du ich könnte deine Klasse benutzen, um auch Matheformeln parsen/kompilieren zu können? und kann man dafür besser diesen parser hier benutzen oder den anderen, den du im 1. post angesprochen hast?

edit:
und kann man dem parser auch mittels eines plugins oder so die unterstüzung von vektoren beibringen?

Dax 4. Jan 2006 12:11

Re: Der HAM-Parser
 
Formeln kompilieren kann dieser Parser noch nicht, aber ich habe vor, ein Plugin zu schreiben, dass genau das tut :) Wenn du ein wenig warten kannst, könnte ich dir es in ein paar Tagen vielleicht schicken oder auch hier posten, je nachdem wie lange ich brauch und obs noch andere Leute interessiert :)

Add: Dazu brauchst du keine Plugins, dazu musst du nur die Felder der TVariable ein wenig ändern und in Funktionen entsprechend nutzen :)

Dax 6. Jan 2006 01:52

Re: Der HAM-Parser
 
Ha, x86-Assembler is da :mrgreen:

Registriert den Assembler im Parser so:
Delphi-Quellcode:
MyAssembler := THAMAssemblerPlugin(Parser.AddPlugin(THAMAssemblerPlugin, [etAfterParse, etEval]);
Dadurch assembliert der Parser (oder besser das Plugin) den Ausdruck automatisch nach dem Parsen und beim Aufruf von .Eval() wird das Kompilat aufgerufen.

Statt .Eval() nutzt ihr besser das:
Delphi-Quellcode:
var
  MyFunc: THAMAssembledMethod;

MyFunc := MyAssembler.Assembly;

//lösen einfach durch Aufruf:
WriteLn(MyFunc.Value:2:2);
Ist dann ca doppelt sie schnell wie das normale Eval() ;)

Aber Achtung: Rückgabewerte des Kompilats sind keine eigene Objekte wie beim normalen lösen, sondern nur Referenzen auf die Lösung!

Edit: Das Plugin ist ab jetzt im Archiv im ersten Posting.

Edit 2: etEval bitte nicht mehr benutzen, das führt komischerweise zu EInvalidPointer-Exceptions, deren Urpsrung ich einfach nicht lokalisieren kann. Besides: direkt die Funktion aufzurufen ist eh nen Tick schneller ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.
Seite 2 von 8     12 34     Letzte »    

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