PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Syntax: Verbesserungsvorschläge


Kabelsalat
2006-06-07, 15:24:26
Hallo,

Ich habe mir einen Parser für mathematische Ausdrücke geschrieben. Der Parser ansich funktioniert wunderbar (nachdem ich mich endlich der nervigen Debugger-Probleme entledigen konnte), nur entdeckt evtl. jemand bei der Syntax noch Verbesserungspotential... mir fällt z.B. als Kritikpunkt ein, dass ein unärer + / - Operator auch zu Beginn eines Ausdrucks nur eingeklammert vorkommen darf (halte ich jedoch nicht für besonders problematisch).

Hier die Syntax:

http://home.arcor.de/_kabelsalat/epifiles.de/daten/tmp/Syntax.png


Schonmal Danke für eure Tipps

Kabelsalat

Coda
2006-06-07, 15:33:53
Uhm kannst du mal ne BNF angeben, dann versteht mans wohl besser :|

Kabelsalat
2006-06-07, 15:50:31
Geschmacksfrage. Ich finde die Flussdiagramme wesentlich anschaulicher und intuitiver...

... aber weil du es bist, mal den Operant in Backus-Naur-Form:

Operant ::= <Variablen(bezug)> | <vorzeichenloser numerischer Wert> | "(" <(einfacher) Ausdruck> ")" | "(" <Vorzeichen (unär +/-)> <Operant> ")" | <Funktion(saufruf)>

Trap
2006-06-07, 15:53:20
Wofür soll das verwendet werden? Als einfacher Taschenrechner sieht es sinnvoll aus. Für ein Computeralgebrasystem reicht es sicher nicht.

Man könnte stattdessen auch RPN oder fully parenthesized prefix notation nehmen, dann ist die Syntax einfacher ;)

Kabelsalat
2006-06-07, 15:58:19
Es geht darum einen mathematischen Term in Infix Notation intern als UPN-Term umzuschreiben, so dass er anschließend schnell ausgewertet werden kann (der Term enthält i.d.R. Variablen).

/edit: "als UPN-Term umzuschreiben" ist etwas unglücklich. Natürlich wird kein String generiert sondern die einzelnen Werte, Operatoren und Funktionen werden in einer wiederverwendbaren Queue gespeichert.

Trap
2006-06-07, 16:18:21
Kabelsalat[/POST]']Es geht darum einen mathematischen Term in Infix Notation intern als UPN-Term umzuschreiben, so dass er anschließend schnell ausgewertet werden kann (der Term enthält i.d.R. Variablen).
Was ist bei dir ein mathematischer Term? "a²+2ab+c" wäre nach deiner Syntax keiner.

Kabelsalat
2006-06-07, 16:27:30
Mein Programm versteht unter "mathematischer Term" eine Syntax wie sie im ersten Beitrag beschrieben wird. Meine Frage sollte ich in diesem Zusammenhang dann auch eher umformulieren: Ist meine Syntax ausreichend um einen tatsächlichen mathematischen Term darstellen zu können? Fehlen Elemente?

Dein Term sähe nach meiner Syntax wie folgt aus: a^2 + 2*a*b + c

Trap
2006-06-07, 16:45:27
Ist meine Syntax ausreichend um einen tatsächlichen mathematischen Term darstellen zu können?
Es kommt darauf an was du als "tatsächlichen mathematischen Term" betrachtest, gib eine formale Definition dafür, sonst ist die Frage sinnlos.

Manche Mathematiker würden das als Term betrachten: "{}∪{{}}", andere auch "((λx.x)1)", wieder andere "1⊕2" (wobei man strenggenommen alles als Funktionen definieren kann: circleplus(1,2) usw., dann hat man aber prefix-Notation)

Kabelsalat
2006-06-07, 16:50:29
Das kann ich leider nicht beantworten, da es sich dabei um eine Aufgabe handelt und kein Einsatzgebiet vorgegeben wurde. Ziel ist es natürlich so viel wie möglich zu unterstützen. Wie du schon sagtest, werden komplizierte Operatoren o.ä. als Funktion ausgedrückt, aber evtl. fehlt ja dennoch ein grundlegendes syntaktisches Element, welches mir durch die Lappen gegangen ist.