Parser für polynomielle Ausdrücke |
25.10.2017, 21:06 | Auf diesen Beitrag antworten » | |||||||||||||||
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 Mit freundlichen Grüßen InformaTiger PS: Quellcode befindet sich als NetBeans Projekt im Anhang |
|||||||||||||||
|
||||||||||||||||
25.10.2017, 21:32 | Auf diesen Beitrag antworten » | |||||||||||||||
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. |
|||||||||||||||
26.10.2017, 08:47 | Auf diesen Beitrag antworten » | |||||||||||||||
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 |
|||||||||||||||
26.10.2017, 09:33 | Auf diesen Beitrag antworten » | |||||||||||||||
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)
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:
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:
Mit freundlichen Grüßen InformaTiger |
|||||||||||||||
Anzeige | ||||||||||||||||
|
||||||||||||||||
26.10.2017, 12:12 | Auf diesen Beitrag antworten » | |||||||||||||||
InformaTiger | Hurray 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 Mit freundlichen Grüßen InformaTiger |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |