AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Der HAM-Parser

Der HAM-Parser

Ein Thema von Dax · begonnen am 26. Dez 2005 · letzter Beitrag vom 17. Jan 2014
Antwort Antwort
Seite 2 von 8     12 34     Letzte » 
Dax
Huhu

Ich hab wieder zugeschlagen ^^ und noch einen Matheparser gebaut

Das Ding heißt HAM (fragt nicht wofürs steht, ich muss mir noch was einfallen lassen ) und ist mal wieder meinem Perfektionismus entsprungen. Der ECQP war einfach nicht so ganz das wahre, also hab ich den gebaut. (Und weil ich quasi versprochen habe, es zu tun ^^)

Also dann.. Ein Archiv sagt mehr als tausend Worte, oder? Eins mit dem gesamten Sourcecode (jämmerlich kommentiert) und (bis jetzt) drei Demos (ganz schön schön kommentiert ) ist im Anhang. Weitere Demos, unter anderem zu den Plugins () werden noch Folgen.

*SCHINKEN zum zerfleddern bereit hinstell* (warum denkt ihr bei dem Namen auch immer ans essen? )
Angehängte Dateien
Dateityp: zip ham_124.zip (28,0 KB, 707x aufgerufen)
 
Daniel G
 
#11
  Alt 28. Dez 2005, 11:42
Zitat von Dax:
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?
  Mit Zitat antworten Zitat
Dax
 
#12
  Alt 28. Dez 2005, 13:46
Zitat von Daniel G:
Großartig! Samma', kann es sein, dass du Douglas Adams auch so gerne liest wie ich?
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 () ist jetzt auch in einer der Demos drin
  Mit Zitat antworten Zitat
Daniel G
 
#13
  Alt 28. Dez 2005, 14:32
Was genau bringt mir jetzt eigentlich die Möglichkeit, Plugins zu schreiben?

P.S.: Und was ist jetzt eigentlich mit meinem Namensvorschlag?
  Mit Zitat antworten Zitat
Dax
 
#14
  Alt 28. Dez 2005, 14:37
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 Aber eigentlich ists zur Funktionserweiterung gedacht. Wenn jemand eine Idee hat, wo man noch mit Plugins ansetzen könnte, immer her damit

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 ^^
  Mit Zitat antworten Zitat
Dust Signs
 
#15
  Alt 28. Dez 2005, 14:38
Könntest du nicht auch eine EXE onlinestellen, damit man gleich testen kann, ohne Delphi anwerfen zu müssen? Thx

Dust Signs
  Mit Zitat antworten Zitat
Daniel G
 
#16
  Alt 28. Dez 2005, 14:48
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?
  Mit Zitat antworten Zitat
Dax
 
#17
  Alt 28. Dez 2005, 17:17
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
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

 
Delphi 2005 Personal
 
#18
  Alt 4. Jan 2006, 13:08
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?
  Mit Zitat antworten Zitat
Dax
 
#19
  Alt 4. Jan 2006, 13:11
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
  Mit Zitat antworten Zitat
Dax
 
#20
  Alt 6. Jan 2006, 02:52
Ha, x86-Assembler is da

Registriert den Assembler im Parser so: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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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