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

Informatiker Board » Themengebiete » Praktische Informatik » Parser für polynomielle Ausdrücke » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Parser für polynomielle Ausdrücke
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Parser für polynomielle Ausdrücke Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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)


__________________
Why do Java developers wear glasses? Because they can't C#

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von InformaTiger: 25.10.2017 21:27.

25.10.2017 21:06 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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)


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 25.10.2017 21:37.

25.10.2017 21:32 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 08:47 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

__________________
Why do Java developers wear glasses? Because they can't C#
26.10.2017 09:33 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
InformaTiger InformaTiger ist männlich
Tripel-As


images/avatars/avatar-77.gif

Dabei seit: 19.02.2013
Beiträge: 228
Herkunft: Südtirol

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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, 348 mal heruntergeladen)


__________________
Why do Java developers wear glasses? Because they can't C#

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von InformaTiger: 26.10.2017 12:16.

26.10.2017 12:12 InformaTiger ist offline Beiträge von InformaTiger suchen Nehmen Sie InformaTiger in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Parser für polynomielle Ausdrücke