| |
|
|
Jac de Lad | Hallo Community!
Bis jetzt bin ich euch eigentlich nur auf die Nerven gegangen, hab unendlich viele Fragen gestellt und meine Progs und Codeschnipsel im Hintergrund gehalten. Naja, das liegt daran, dass meine Programme wahrescheinlich keine große Verwendung für euch haben. Wie auch immer. Ich arbeite im Moment an einem Taschenrechner, der nicht nur einfach rechnen soll, sondern auch Funktionen (auch in 3D) darstellen soll, sowie Terme umformen und auf lösen, Umgehen mit komplexen Zahlen etc...jedenfalls habe ich angefangen einen Parser für mathematische Ausdrücke zu schreiben. Ich denke, den könnt ihr vielleicht auch gebrauchen...allerdings ist der noch nicht fertig. Er beherrscht im Moment folgendes: - Die Grundrechenarten +-*/ sowie (Division mit Abschneiden der Machkommastellen) und Potenzen (mit ^) - Klammern (egal ob (), [], {}, <> oder gemischt, alles wird erkannt) - Leerzeichen werden ausgefiltert - negative Zahlen müssen nicht in Klammern gefasst werden (bitte ausprobieren) - fängt folgende Fehler ab: Division durch 0, unausgewogene Klammern, nicht vorhandener Term, unerlaubte Zeichen im Term (noch unvollständig), falsche Klammeranordnung - Groß- und Kleinschreibung wird ignoriert (für spätere trigonometrische Funktionen und so, jetzt noch nicht von Belang) aber das Wichtigste: er orientiert sich an Punktrchnung vor Strichrechnung und Potenzen vor Punktrechnung!
Alle die im Zeit haben: Bitte probiert das Teil mal aus. Das ganze habe ich in eine PCU gepackt und ist im Prinzip eine Klasse. Hier ein Demo-Code:
Ich will im Moment noch nicht viel verraten, das folgt alles, wenn der Parser einwandfrei funktioniert. Zum Ausprobieren einfach die Formel ändern, der Demo-Code ist eigentlich auch nicht schwer zu verstehen. Mir gehts, wie gesagt, im Moment nur darum Fehler aufzudecken. Ich hab bis jetzt keine gefunden, aber ich rechne mit ner Lawine Zuschriften. Naja, wenn das dann irgendwann richt funzt kann ich die Trigonometrie einbauen und Stochastik und so, dann werde ich auch eine vollständige Beschreibung liefern. Also wie gesagt: BITTE FEEDBACK, gerade wegen negativer Zahlen!
Jac
@Michael Wodrich: Vielen Dank für deine Hilfe! Ich hab leider die alte Version völlig verhunzt und hab deswegen nochmal von vorne angefangen. Aber einiges konnte ich wiederverwenden, vor allem wäre ich ohne deine Hilfe nicht so schnell vorangekommen!!!
Nachtrag: Auf neue Version aktualisiert: 0.1.0.4 (Verbesserung der Erkennung negativer Zahlen, müsste jetzt perfekt sein, der Term kann jetzt auch Parameter der Prozedur Parse angegeben werden [hat Vorrang vor der Angabe mit .term&!]). |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 09.02.2006 ▲ |
|
|
|
|
| Super Teil! Nurn andern Namen braucht es wohl.
Parser gibts ja viele...
Meine kurzen Tests hatte er fehlerlos Überstanden! |
|
|
| |
|
|
|
Jac de Lad | Gut, ich werde weiter dran feilen! Hab schon etliche Ideen. Name...hm...mir ist nichts besseres eingefallen als Matheparser (was es ja im Grunde ist). Wenn jemand Vorschläge hat...
Schade nur eine Rückmeldung; also wenn noch jemand einen Kommentar hat: hier, hier (winke, winke!)!!!
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.02.2006 ▲ |
|
|
|
|
Frank Abbing | Hi,
ich selber benötige so einen Parser nicht. Aber wenn du XPIA nutzten würdest, könntest du auf viele hochwertige und schnelle Mathefunktionen und Fliesskommafunktionen zugreifen. Masms eigene Library masmlib32 bietet in dieser Richtung einiges. Mathe und Konvertierung (z.B. String nach Fliesaskommo und umgekehrt). |
|
|
| |
|
|
|
Jac de Lad | Hallo Community. Hm, auch wenn das Interesse nur mäßig ist mache ich das Teil fertig. Ich hatte es ja urspränglich auch nur für mich gedacht.
@Frank: Ja, ich weiß, aber ich bin noch nicht so Assemblerfirm, dass ich das hinkriegen würde. Deswegen mache ich das jetzt in Profan fertig.
Hier die Änderungen der neuen Version:
Parser 0.2.0.7: - das * muss nicht mehr vor Klammern angegeben werden - beherrscht ! (Fakultät) und ° (Umwandlung von Dezimalgrad in Bogenmaß) - Aufeinanderfolgende Operatoren werden erkannt - Potenzen mit der Basis 0 werden nun korrekt erkannt (vorher Fehlermeldung) - Operatoren am Anfang oder Ende des Terms werden erkannt - mehrere Dezimalpunkte in einer Zahl werden erkannt - Führende Null von Kommazahlen 1<x<1 muss nicht angegeben werden - Neue Funktionen: Sinus, Cosinus, Tangens, Cotangens, Sekans...(insgesamt 32 Stück) - 3 Konstanten eingeführt: Pi, Eulersche Zahl und Phi (mit pi, ez und phi)
Und hier ein aktualisierter Testcode: KompilierenMarkierenSeparieren Naja, wer Lust hat...und für Fehler bin ich immer offen!
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.02.2006 ▲ |
|
|
|
|
Jac de Lad | Uups, hier noch schnell ein Bugfix (tut mir leid):
- Neue Funktion: lz (logarithmus zur Basis 2) - Bugfix der Funktion cosec (hatte Compilieren verhindert)
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.02.2006 ▲ |
|
|
|
|
Jac de Lad | So, hier ist das vorerst letzte Update. Mangels Interesse poste ich hier nur die korrigierte Version, wer doch Interesse haben sollte kann das hier posten oder mit per Email an jac@parasun.de schreiben. Ich werde trotzdem weiterentwickeln, also wer Interesse hat bekommt ne gut ausgebaute Version. Letzte Änderungen (Version 0.3.0a.15):
- Bugfix wegen Fehler verhinderte Ausführen von Compilaten - 6 neue Winkelfunktionen - viele unmögliche Operationen werden nun erkannt - Das Ergebnis wird nun auch in .Result$ zurückgegeben - Mit großen Zahlen (Zahlen mit Exponenten) konnten Fehler auftreten, behoben - Bugfix wegen Fehler verhinderte Ausführen von Compilaten - 6 neue Winkelfunktionen - viele unmögliche Operationen werden nun erkannt - Das Ergebnis wird nun auch in .Result$ zurückgegeben - Mit großen Zahlen (Zahlen mit Exponenten) konnten Fehler auftreten, behoben - neue Operationen mit mehreren Paramtern (Stochastik, etc.)
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 11.02.2006 ▲ |
|
|
|
|
| Die PCU ist sehr nett - und das mit dem magelnden Interesse wird sich sicherlich auch ändern. Bitte vergiss nicht das dies hier eine sehr kleine Community ist.
Hast Du Interesse das die Unit hier: [...] aufgelistet wird? |
|
|
| |
|
|
|
Michael Wodrich | Die Beschreibung hört sich gut an, aber ich bekomme nur eine PCU Datei als Download.
Du hast da ja in kürzester Zeit ganz schön zugeschlagen...
...aber meine Kristallkugel ist grad in Reparatur, kannst Du nicht mal konkrete Funktionsnamen nennen, damit wir das mal durchtesten können?
ZIP mit PCU und Hilfedatei wäre gut.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 12.02.2006 ▲ |
|
|
|
|
Jac de Lad | @iF: Hm, noch nicht, weil die PCU noch nicht fertig ist. Ich habe auch grad wieder eine Latte von Fehlern entdeckt, die ich im Moment behebe (einige gehen sogar so tief, dass die komplette Berechnung durch Schlüsselwörter betroffen ist. Ich melde mich, wenn ich eine neue, verbesserte oder wenigstens gefixte Version fertig habe.
@Michael: Meinst du Funktionen der PCU oder Funktionen, die innerhalb des Terms erlaubt sind? Die PCU hat nur die Klasse, da gibts eigentlich nicht mehr zu erklären; die Funktionen in den Termen (hab im Moment 59 eingebaut) erkläre ich demnächst. Ich habe wie gesagt grad noch ein paar massive Probleme gefunden, sodass ich das erstmal korrigieren muss und mich dann um eine Dokumentation kümmern werde! Aber Standardfunktionen wie Sinus und Cosinus und so sind wie überall bezeichnet (Sin(3,141593) oder Cos(180°)). Wie gesagt eine Doku kommt bald.
Schön, dass doch ein wenig Interesse da ist!
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 12.02.2006 ▲ |
|
|
|
|
Michael Wodrich | [quote:bc8ba170c1]Schön, dass doch ein wenig Interesse da ist![/quote:bc8ba170c1] Das liegt einfach nur daran, daß man nicht immer gleich sein gerade aktuelles Projekt beiseite legen kann...
Ich warte auf Nachschub von Dir, bis dahin ist bestimmt auch mehr Zeit verfügbar...
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 12.02.2006 ▲ |
|
|
|
|
| @Jac:
Um das Herstellen einer Hilfe deutlich zu beschleunigen habe ich dem XPSE paar kleine tolle Features für die Herstellung von Units beigebracht. Schau mal in die Hilfe.
a) Da schreibt sich das Dokumentieren wie von selbst. b) jedem Kompilieren entsteht eine .def Datei. Darin stehen dann schonmal alle Procs. c) ein paar offensichtliche Fehler werden angezeigt. |
|
|
| |
|
|