Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Parser für polynomielle Ausdrücke » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 5 Beiträge
InformaTiger

Hurray Tanzen

ich habe es mittlerweile geschafft den Parser so zu schrieben, dass er mehrere Ausdrücke parst und auch berechnet. Was ich allerdings außer Acht gelassen habe ist die Präzedenz bzw. die Priorität der Operatoren.

Ich hatte mir gedacht, die Ausdrücke in eine PriorityQueue zu packen und nach Priorität des Operators zu sortieren - was ich dabei aber nicht bedacht habe ist, dass dies an meiner Situation nicht wirklich etwas ändert. Hat jemand einen Tipp für mich wie ich die Ausdrücke so anordnen kann, dass Punkt vor Strich gilt (derzeit rechnet mein Evaluator einfach stur von links nach rechts)?

Ich hänge mal die neuen Sourcefiles in den Anhang.

edit: Polnische Notation sagt mir was bzw. ist allgemein als Schreibweise mathematischer Ausdrücke in der Informatik recht angesehen. Leider habe ich aber keine Ahnung wie ich die hier einbauen sollte Zunge raus

Mit freundlichen Grüßen
InformaTiger

Dateianhang:
zip Polynomial.zip (40 KB, 349 mal heruntergeladen)
InformaTiger

Also, vielleicht irre ich mich auch mit der Terminologie etwas da ich sowas ansonsten nie mache, aber es sollte ungefähr so aussehen:

EBNF (vermutlich nicht ganz formal korrekt, da dies mein erster Versuch ist, das zu beschreiben was ich haben möchte)
code:
1:
2:
3:
4:
5:
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
integer = digit, { digit };
operator = "+" | "-" | "*" | "^";
variable = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z";
polynomial = digit | variable, operator, { polynomial }


Wie bereits erwähnt sollen alle Operationen explizit angegeben werden (z.B 3*x und nicht 3x). Erlaubt sind nur die Operatoren Plus, Mal, Minus und Hoch. Unter Ausdrücke verstehe ich folgendes:

code:
1:
2:
3^x // ein Ausdruck
3^x + 6 - 19 // mehrere Ausdrücke


Ich hoffe das machte es halbwegs verständlich, was mein Resultat sein sollte. Und für einen Ausdruck funktioniert das ganze ja auch, ich brauche nur noch die Möglichkeit, dass da als linke Rechenoperation auch ein Polynom bzw ein Ausdruck stehen kann, da ansonsten beispielsweise nur sowas gültig wäre:

code:
1:
2:
3^x 6 + 8 19 - 5 // derzeit gültig bzw. so falsch
3^x + 6 - 19 // mein Ziel bzw. richtig


smile

Mit freundlichen Grüßen
InformaTiger
Karlito

Hallo InformaTiger

Da komme ich wahrscheinlich erst am WE dazu. Könntest du mal erläutern, was Du meinst? Wie soll deine Sprache aussehen? Was meinst Du mit mehreren Ausdrücken? Meinst Du eine Liste mit Polynomen?
(ich habe mir deinen Code noch nicht wirklich angeschaut)

Gruß,

Karlito
eulerscheZahl

Von den Tiefen meiner Festplatte, habe ich vor Jahren mal geschrieben.
Das kann Funktionen parsen, ableiten und für gegebene Variablen auswerten.

Edit:
du definierst dir ja eine richtige Grammatik, da hilft dir mein Code vermutlich nicht besonders.
Hier geht es zum Java Compilercode.

Dateianhang:
zip Parser.zip (3,40 KB, 321 mal heruntergeladen)
InformaTiger Parser für polynomielle Ausdrücke

Hallo,

ich bastle derzeit an einem simplen Parser und Evaluator für polynomielle Ausdrücke. Mein derzeitiger Stand erlaubt nur das Parsen eines einzelnen Ausdrucks aufgrund des statischen Konzepts meines Parsers.

Ich habe aber leider keine Idee wie ich das Modell ändern könnte, dass er mehrere Ausdrücke zusammen parsen kann. Hat jemand Tipps für mich?

edit: unterstützte Operatoren sind nur plus, mal, minus und Potenzen. Des weiteren sind alle Operatoren explizit hinzuschreiben (bspw. 3x ist ungültig).

Danke schon im voraus smile

Mit freundlichen Grüßen
InformaTiger

PS: Quellcode befindet sich als NetBeans Projekt im Anhang

Dateianhang:
zip polynomial_java.zip (60 KB, 336 mal heruntergeladen)