Gleichung parsen

Status
Nicht offen für weitere Antworten.

Henrik79

Mitglied
Hallo zusammen und wieder einmal eine Anfaenger Frage:

Ich habe ein JTextField für die Eingabe einer Gleichung in der Form:

z.B. X^2 + 2X-1


Dann habe ich eine Funktion f

die folgendermaßen definiert ist:

Java:
public double f(double x){

return Funktion aus JTextfield in der Form (x*x+2*x-1)

}

Die hinter Form in der Klammer stehende Funktion soll GENAU SO hinter dem Return landen. (Liegt an meiner mathematischen Zeichenmethode, die das genau so benötigt)

nun stellt sich mir die Frage wie ich es hinbekomme den Text aus dem JTextField hinter das Return der Funktion zu bekommen, ich brauche da dringend Hilfe.

Vielen Danke im voraus und entschuldigt diese nervigen Anfängerfragen.

Achja natürlich soll aus dem JTexfield jede Mathematische Funktion als auch e und x^3-x^2+x-1 oder höhere Funktionen geparsed werden.

Gruß

Henrik
 

Der Müde Joe

Top Contributor
Ist nicht ganz trivial, Funktionen zu parsen. Dafür benötigt man halt eben einen Parser. Ein guter Parser-generator ist ATNLR. Irgendwo hab ich hier auch mal eine Grammatik gepostet, welche Variablen etc erkennt und auch math. Dinge erkennt. Must mal suchen
 

Henrik79

Mitglied
Hmm mit ATNLR kenne ich mich leider gar nicht aus, aber wie wäre denn eigentlich die typische Vorgehensweise? Bzw. wie würde ich das oben angestellte Beispiel lösen können? Bzw. was ist der Ansatz aus einem X aus einem String ein X als Variable im Java Code zu machen?

Gruß

Henrik
 

0x7F800000

Top Contributor
Bzw. was ist der Ansatz aus einem X aus einem String ein X als Variable im Java Code zu machen?
Vergiss die Idee lieber gleich, für sowas müsstest du den halben Java-Compiler neuschreiben. Nimm einen parser-generator, bastle dir einen parser, und siehe zu, dass du das ergebnis irgendwie sinnvoll verwenden kannst. So wie du es vorhast ist es nicht umsetzbar. Vielleicht würde es aber mit einem Umweg über irgendeine Script-Engine so ähnlich gehen... :bahnhof:
 

Henrik79

Mitglied
Hmm,

erklär mir das bitte mal genauer, wie funktioniert das mit einem Scriptgenerator und tut das der Plattformunabhängigkeit einen Abbruch?
 

0x7F800000

Top Contributor
tut das der Plattformunabhängigkeit einen Abbruch?
Wieso das? Du tippst da deine Grammatik rein, es spuckt dir Java-Code raus. Java läuft immer und überall.

Wie ANTLR konkret funktionieren soll: kA, nach scala's dsl'igen Combinator'en werd ich das hoffentlich auch nicht wissen wollen :bae: . Aber bei Java kommt man um ANTLR afair nicht so schnell drumherum, also wirst du dir wohl die beschreibung durchblättern müssen...
 

Henrik79

Mitglied
Und was ist die Alternative mit dem Scriptgenerator? Hmm wie lange brauche ich wohl um ANTLR das ganze hinzubekommen?

Kennt jemand eine gute Beschreibung zu diesem Tool und dessen Einbindung in ein bestehendes Projekt?

Natürlich alternativ dazu das selbe mit dem Scriptgenerator?


Gruß

Henrik
 

0x7F800000

Top Contributor
Und was ist die Alternative mit dem Scriptgenerator?
Sowas ungefähr:
Scripting for the Java Platform
Die Idee ist halt, dass du die Eingabe nicht selbst parsst, sondern dich an irgendeine vorgegebene Syntax einer bereits unterstützten Skriptsprache hältst, und dann die Eingabe einfach als ein Stück code in dieser Skriptsprache ausführen lässt. Zum einen dürfte es etwas langsamer sein, da etwas weniger Problemnah. Zum anderen kriegst du standardmäßig eh nur Rhino 1.6 o.ä. für Javascript geliefert. Und javascript kann mit mathematischen Formeln genauso gar nix anfangen, wie java.

Hmm wie lange brauche ich wohl um ANTLR das ganze hinzubekommen?
das hängt davon ab
  • wieviel du schon mit ANTLR gearbeitet hast
  • wieviel du zum thema Compilerbau gehört/gelesen hast
  • wieviel du allgemein über Grundlagen der theoretischen Informatik weisst
  • wie motiviert du bist
eigene Parser zu schreiben ist i.Allg. ein ziemlich aufwendiger Spaß. Wobei das natürlich alles relativ ist... Übung macht den Meister^^

Natürlich alternativ dazu das selbe mit dem Scriptgenerator?
Dazu ist nicht viel zu sagen: folge dem Link, schau's dir kurz an, dann schreib in deinen code einfach die ein paar Zeilen, die javascript interpretieren, fertig. Aber wie gesagt: für Mathe wird sich das wohl als wenig brauchbar erweisen.
 

JanHH

Top Contributor
Ich hab mal einen Parser für Rechenausdrücke (bzw. für eine komplette eigene Skriptsprache, die halt auch Rechenausdrücke enthalten kann) geschrieben. Es ist nicht trivial aber auch nicht unmöglich (und ich muss es für ein neues Projekt jetzt auch wieder tun).

Als erstes braucht man einen Tokenizer, der den String in Tokens zerhackt. Daraus kann man dann rekursiv einen Baum, der den Rechenausdrück darstellt, konstruiren. Ausserdem muss man natürlich ein internes Variablenkonzept implementieren, wobei das deutlich einfacher wird, wenn Du nur eine Variable "x" zulassen willst.

Der Baum besteht aus Knoten, und jeder Knoten entspricht einer Rechenoperation. Ein Plus-Knoten liefert die Summe seines rechten und linken Astes zurück, usw. Alle Knoten sind von einer abstrakten Klasse RechenKnoten abgeleitet, die die Funktion getValue() hat, welche den Baum durchläuft und die Berechnung ausführt.

Also wenn Du z.b. hast

x*(x+2)

dann erzeugt der Tokenizier daraus drei Token:

x
*
(x+2)

Das Analysieren dieser Tokens erzeugt einen Multiplikations-Konten mit dem linken Ast "x" und dem rechten Ast "x+2". Da x+2 noch kein "finaler" Ausdruck ist, wird dieser wiederum tokeniziert, wo dann
x
+
2

bei rauskommt. Daraus wird (als rechter Ast des Multiplikations-Knotens) ein Plus-Konten mit "x" als linkem und "2" als rechtem Ast generiert.

Man bekommt also

MultKnoten(links: x, rechts: PlusKnoten(links: x, rechts:2))

und damit kann man dann den Wert der Funktion in Abhängigkeit von x berechnen.

All das muss man implementieren, wenn man mathematische Ausdrücke verarbeiten will.

Kann mir allerdings nicht vorstellen, dass es sowas nicht schon irgendwo fertig gibt.
 

Henrik79

Mitglied
Hi JanHH,

bei mir wird auch nur die Variable X zugelassen, die Vektorfunktionen werden über Parameterform realisiert, was mit einem Tokenizer relativ einfach ist, da nur Zahlenwerte übergeben werden.

Kennst du irgendwo eine gute Seite und eine Referenz zum erstellen von Bäumen und Knoten für Java?

Gruß

Henrik
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Gleichung String Split Java Basics - Anfänger-Themen 6
S Eingabe in einer Gleichung. Java Basics - Anfänger-Themen 14
S Lineare Gleichung lösen Java Basics - Anfänger-Themen 1
C Gleichung mit Potenz mit einer Unbekannten lösen Java Basics - Anfänger-Themen 5
B lineare Gleichung programmieren Java Basics - Anfänger-Themen 2
R quadratische Gleichung Java Basics - Anfänger-Themen 23
M Quadratische Gleichung Java Basics - Anfänger-Themen 6
B Quadratische Gleichung mit JAVA lösen Java Basics - Anfänger-Themen 5
S Quadratische Gleichung Java Basics - Anfänger-Themen 5
calzone Problem einer Gleichung mit Modulo Java Basics - Anfänger-Themen 5
V Quadratische Gleichung Java Basics - Anfänger-Themen 20
O Quadratische Gleichung Problem?! Java Basics - Anfänger-Themen 7
F Problem mit quadratischer Gleichung Java Basics - Anfänger-Themen 4
K Lösen einer Gleichung Java Basics - Anfänger-Themen 12
G Frage wegen Quadratische Gleichung Java Basics - Anfänger-Themen 9
G Zahlen aus Gleichung Java Basics - Anfänger-Themen 4
G quadratische Gleichung lösen Java Basics - Anfänger-Themen 2
B Gleichung auslesen und dann damit Rechnen? Java Basics - Anfänger-Themen 4
I gleichung lösen Java Basics - Anfänger-Themen 4
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
W Strings und das parsen Java Basics - Anfänger-Themen 8
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
K String nach bestimmtem Muster parsen Java Basics - Anfänger-Themen 3
K Datentypen String zu Integer parsen Java Basics - Anfänger-Themen 2
L Jackson JSON parsen Java Basics - Anfänger-Themen 7
7.7GradOst Datentypen Stringeingabe aus z.B. "4,d,<" parsen Java Basics - Anfänger-Themen 7
D InputStream parsen und als Bilddatei abspeichern Java Basics - Anfänger-Themen 1
M JAVA String schnell parsen Java Basics - Anfänger-Themen 14
K Methoden Datum parsen Java Basics - Anfänger-Themen 16
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
J Rekursives Parsen (ohne Reg Expressions) Java Basics - Anfänger-Themen 8
L Beliebigen Datentypen aus String parsen Java Basics - Anfänger-Themen 6
L Datei aus Multipart parsen und speichern, seltsam codiert? Java Basics - Anfänger-Themen 16
J String aus Json File parsen Java Basics - Anfänger-Themen 6
S Date parsen klappt nicht richtig Java Basics - Anfänger-Themen 3
M Webseiten Parsen Java Basics - Anfänger-Themen 2
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
V Umlaute beim Parsen einer HTML Seite Java Basics - Anfänger-Themen 4
P String parsen Java Basics - Anfänger-Themen 5
S fehler beim datum parsen Java Basics - Anfänger-Themen 6
T Klassen CSV datei einlesen und parsen Java Basics - Anfänger-Themen 4
F Methoden Termin parsen Java Basics - Anfänger-Themen 2
Luk10 String (Hexadezimal) zu int parsen Java Basics - Anfänger-Themen 12
O Nicht Standard Form boolesche Funktion in Standard Form parsen Java Basics - Anfänger-Themen 3
E Datentypen Unvollständiges Datum parsen Java Basics - Anfänger-Themen 8
U Website parsen Java Basics - Anfänger-Themen 11
D Java - OutOfMemoryError beim Parsen Java Basics - Anfänger-Themen 15
J String zu Double parsen (multiple points) Java Basics - Anfänger-Themen 2
K Fehlerbehandlung beim Parsen von Strings Java Basics - Anfänger-Themen 9
F Datum AM / PM parsen Java Basics - Anfänger-Themen 5
A Datentypen Datum mit "May" zu Date parsen Java Basics - Anfänger-Themen 6
F Datum parsen Java Basics - Anfänger-Themen 6
R Datumsformatierung parsen Java Basics - Anfänger-Themen 8
E Code parsen/ formatieren Java Basics - Anfänger-Themen 3
G String parsen Java Basics - Anfänger-Themen 3
J int Wert mit getter holen und in String parsen Java Basics - Anfänger-Themen 5
trash Double Parsen? Java Basics - Anfänger-Themen 3
M Datum parsen Java Basics - Anfänger-Themen 10
A Parsen von double zu int? Java Basics - Anfänger-Themen 2
L String zu Enum parsen Java Basics - Anfänger-Themen 8
L String zuverlässig nach Char parsen? Java Basics - Anfänger-Themen 4
S String KeyEvent parsen Java Basics - Anfänger-Themen 2
D Datum parsen Java Basics - Anfänger-Themen 11
H XML Parsen Java Basics - Anfänger-Themen 7
J HTML mit XPath parsen Java Basics - Anfänger-Themen 7
Spin SAX parsen ..XML not found Java Basics - Anfänger-Themen 2
W String zu Calendar parsen Java Basics - Anfänger-Themen 4
S String Parsen Java Basics - Anfänger-Themen 3
T Zeitwerte parsen Java Basics - Anfänger-Themen 6
J Scanner - Zeile parsen Java Basics - Anfänger-Themen 8
S String parsen Java Basics - Anfänger-Themen 17
W Char in String parsen Java Basics - Anfänger-Themen 6
E Wochentag String parsen Java Basics - Anfänger-Themen 2
S Ascii Datei parsen Java Basics - Anfänger-Themen 2
bugmenot args parsen Java Basics - Anfänger-Themen 3
G Swing xml parsen - Office Java Basics - Anfänger-Themen 8
M Bilder "parsen" Java Basics - Anfänger-Themen 5
G String parsen Java Basics - Anfänger-Themen 7
G Char Wert in Int Wert parsen Java Basics - Anfänger-Themen 10
P HTML parsen Java Basics - Anfänger-Themen 2
K Objekte zurück parsen Java Basics - Anfänger-Themen 2
D xml parsen mit Java Java Basics - Anfänger-Themen 5
G Vector Strijng parsen Java Basics - Anfänger-Themen 6
G Url parsen? Java Basics - Anfänger-Themen 3
H parsen Java Basics - Anfänger-Themen 24
M probleme beim parsen Java Basics - Anfänger-Themen 7
T Beim XML-Parsen Text einlesen Java Basics - Anfänger-Themen 5
C parsen Java Basics - Anfänger-Themen 2
G Parsen eines Strings Java Basics - Anfänger-Themen 4
M Object[] parsen Java Basics - Anfänger-Themen 9
E Mathematisch parsen, aber mit einer Variablen X ! Java Basics - Anfänger-Themen 6
N Int parsen Java Basics - Anfänger-Themen 3
D Array Parsen Java Basics - Anfänger-Themen 4
N Datum parsen Java Basics - Anfänger-Themen 3
P Datei mit Strings parsen Java Basics - Anfänger-Themen 4
M Html Parsen / Values von Hidden Fields auslesen Java Basics - Anfänger-Themen 10
W html parsen Java Basics - Anfänger-Themen 2
K Tokens in Integer parsen Java Basics - Anfänger-Themen 2
D HTML-Datei einlesen/parsen Java Basics - Anfänger-Themen 9
J java script mit java parsen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben