![]() |
Re: Der HAM-Parser
Zitat:
|
Re: Der HAM-Parser
Zitat:
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 :) |
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? |
Re: Der HAM-Parser
Zitat:
Zitat:
|
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 |
Re: Der HAM-Parser
Zitat:
|
Re: Der HAM-Parser
Zitat:
Als Beispiel den Baum für, sagen wir, 2*f(x^2) (nur die Node-Typen der einzelnen Teile des Baums):
Code:
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 :)
ntVariable ntOperator ntFunction ntParameters
+ntParameter +ntVariable ntOperator ntVariable edit: Rechtschreibfehler werden wieder einkassiert :mrgreen: |
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 ![]() edit: und kann man dem parser auch mittels eines plugins oder so die unterstüzung von vektoren beibringen? |
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 :) |
Re: Der HAM-Parser
Ha, x86-Assembler is da :mrgreen:
Registriert den Assembler im Parser so:
Delphi-Quellcode:
Dadurch assembliert der Parser (oder besser das Plugin) den Ausdruck automatisch nach dem Parsen und beim Aufruf von .Eval() wird das Kompilat aufgerufen.
MyAssembler := THAMAssemblerPlugin(Parser.AddPlugin(THAMAssemblerPlugin, [etAfterParse, etEval]);
Statt .Eval() nutzt ihr besser das:
Delphi-Quellcode:
Ist dann ca doppelt sie schnell wie das normale Eval() ;)
var
MyFunc: THAMAssembledMethod; MyFunc := MyAssembler.Assembly; //lösen einfach durch Aufruf: WriteLn(MyFunc.Value:2:2); 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 18:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz