Entwickler-Ecke

Open Source Units - Einfacher MatheParser


Jerk - Mo 18.08.08 18:47
Titel: Einfacher MatheParser
Ich habe einen einfachen Matheparser geschrieben der bisjetzt die Grundrechenarten beherrscht und auch Klammern berücksichtigt.
Als Input kann man einen String wie z.b. 2(5/(10*(2+2)-5)^0,5) senden und erhällt dann ein hoffentlich richtiges Ergebnis.

Warum ich diesen hier hochlade?

Es geht mir primär darum von euch zu hören was ich noch besser machen kann. Ich habe mir Delphi eigentlich zu 90% selber bei gebracht und habe deswegen noch nicht den richtigen Durchblick. Genau das erhoffe ich aber hiermit etwas zu verbessern. Deshalb bin ich total offen :p für Kritik und höre gerne wie man es richtig realisieren würde :)

Weiter Geplant sind das Rechnen mit Variablen ( Gleichungen Lösen ) sowie andere Rechenoperatoren ( Sin,Cos,e uvm)

Bekannte Probleme:
- Keine wirkliche Fehlerabfrage
- Derzeit wird die Aufgabe 5*5^5 so gerechnet: (5*5)^5 statt 5*(5^5), ich suche noch nach der besten Lösung, ich habe zwar eine die gefällt mir aber nicht.


edit*
Kleine Änderung hochgeladen


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function TMathParser.Parse(Input: string) : String;
var i : integer;
begin
...
 // Preparation for PlusMinus for brackets
 sLine := StringReplace(sLine,'*(','*(0+',[rfReplaceAll]);
 for i := 0 to 9 do
  sLine := StringReplace(sLine,inttostr(i)+'(',inttostr(i)+'*(0+',[rfReplaceAll]);
...
end;



Moderiert von user profile iconNarses: Topic aus Freeware Projekte verschoben am Mo 18.08.2008 um 19:20


huuuuuh - Mo 18.08.08 18:56

was macht das unter freeware?
btw. werds mir mal ansehen...


Jerk - Mo 18.08.08 18:57

Argh wollte es bei Open Source Units posten -.- Bitte moven.


edit : Danke


Th69 - Di 19.08.08 13:10

Zitat:

Deshalb bin ich total offen :p für Kritik und höre gerne wie man es richtig realisieren würde


Wie du schon selber erkannt hast, hat dein String-Parser einige gravierende Schwächen.

Professionell arbeitet man meistens mit einem Top-Down-Parser, welche anhand einer EBNF-Definition erstellt wird (d.h jeder Teil-Ausdruck entspricht einer Funktion, welche sich rekursiv aufrufen können).

Ich habe schon vor ca. 12 Jahren in Pascal so einen Parser erstellt, weiß aber nicht mehr ob ich die Sourcen noch wiederfinde.

Auf meiner Homepage gibt es den Source-Code für einen Mathe-Parser in C++ (evtl. kann der dir dann weiterhelfen):
http://www.bitel.net/dghm1164/downloads/FctParser-Sources.zip


Jerk - Di 19.08.08 17:10

Vielen dank dafür, ich wollte sowieso Studiumsvorbereitent mit C++ anfangen!


Delete - Di 19.08.08 18:14

Lustig dein Mathe-perser.Sieht ganz schick aus allerdings solltest du so schnell wie möglich
seine schon bekannten Schwächen kurieren. :P Sonst ist er nicht konkurenfähig. :wink: