• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Wer kann das interpretieren?

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Ich muss in Java einen Auswerter für mathematische Terme schreiben, der mathematische Vorrangregeln beachtet und habe folgende Vorgabe
  • Ausdruck ::= Term [('+'|'-') Ausdruck]
  • Term ::= Faktor [('*'|'/'|'%') Term]
  • Faktor ::= Element ['x^y' Faktor]
  • Element ::= Wert | '(' Ausdruck ')'
  • Wert ::= Zahl ('sin'|'x^2'|'+-')*
Leider kann ich damit nicht wirklich viel anfangen. Kann mir jemand mal auf Deutsch vermitteln, was das genau heissen soll?

Vielen Dank schon einmal.
 
Zuletzt bearbeitet:
Danke schon mal, ich warte noch ein bisschen auf Feedback und im Falle, dass nichts dabei raus kommt, schreibe ich ihm mal eine PM ...
 
…unser Java-Entwickler vor dem Herrn ;)
 
Lass es mich wissen ... habe mir schon alles Mögliche über Terme, Faktoren, Ausdrücke und Boolsche Algebra einverleibt und bin nicht viel klüger geworden :P
 
Okay, ich habe es vielleicht verstanden. Uebernehme aber null Gewaehr ob das wirklich stimmt.

Ausdruck ::= Term [('+'|'-') Ausdruck]
Ausdruck a = Term b, optional gefolgt von +Ausdruck a oder -Ausdruck a
z.B.
a = b
a = b + a

Term ::= Faktor [('*'|'/'|'%') Term]
Term a = Faktor b, optional b*a, b/a, b%a
z.B.
a = b
a = b * a
a = b % a
% = Modulo, also der Rest einer Division. 7 % 2 = 1

Faktor ::= Element ['x^y' Faktor]
Das verstehe ich nicht

Element ::= Wert | '(' Ausdruck '('
Element a = Wert b oder (Ausdruck c(?
Das verstehe ich auch nicht. Ausser, hier wird ein String erwartet?

Wert ::= Zahl ('sin'|'x^2'|'+-')*
Wert a = Sinus Zahl b oder Zahl b x^2?? oder ?? <- und davon keine oder beliebig viele Wiederholungen

Okay, einen Schritt naeher sind wir schon :innocent:

gruss
Jonathan
 
Also erst einmal vielen Dank ... das hilft mir auf jeden Fall ein Stückchen weiter.

Ausser, hier wird ein String erwartet?
Genau ... die Terme werden Zeilenweise aus einer Datei ausgelesen und als String übernommen. Dann zerstückelt, interpretiert, umgewandelt und schließlich berechnet ... Wenn es denn mal soweit kommen sollte, dass ich den Evaluator komplett verstehe :-/

Danke noch mal für Deine Mühen. Für weitere Tips bin ich immer dankbar :)
 
Also, meine allgemeinen Erkenntnisse aus der Wikipedia-Seite:
[ foo] ist optional (diese Darstellung war mir bekannt)
| bedeutet oder (auch das sollte bekannt sein)

Zu (' Ausdruck '('
Element waere also zum Beispiel 12 oder 12(foo(? Das ergibt doch keinen Sinn :D
 
Stimmt, es muss auch
  • Element ::= Wert | '(' Ausdruck ')'
heissen. Sorry.
 
Ok, dank der Tipps von Nogger und tjp, sowie der Hilfe von kauan denke ich, dass es jetzt klar sein müsste.

Ausdruck ::= Term [ ('+'|'-') Ausdruck ]
Ein Ausdruck ist definiert als Term mit Option + oder - Ausdruck

a = b
optional: a = b + a
optional: a = b - a



Term ::= Faktor [ ('*'|'/'|'%') Term]
Ein Term ist definiert als ein Faktor mit Option * oder / oder % dem Term

a = b
optional: a = b * a
optional: a = b / a
optional: a = b % a



Faktor ::= Element ['x^y' Faktor]
Ein Faktor ist als ein Element definiert, und falls hinter dem Element ein 'x^y' folgt, muss danach ein weiterer Faktor stehen

a = b
optional: a = b^a



Element::= Wert | '(' Ausdruck ')'
Ein Element ist definiert als ein Wert oder ein Ausdruck eingeschlossen in '(' und')'

a = b
optional: a = ( Asudruck --> s.o. 'Ausdruck' )


Wert ::= Zahl ('sin'|'x^2'|'+-'|'...')*
Ein Wert ist definiert als eine Zahl der 0mal bis beliebig oft 'sin', 'x^2', '+-', oder sonst welche Operatioinen folgen können

a = b
optional: a = b sin
optional: a = b sin sin
optional: a = b sin sin sin usw.

Falls noch Fehler drin sind, dann bin ich - wie immer - dankbar für jeden Hinweise :)
 
Tatsächlich. Den habe ich wirklich übersehen :) ... habe sofort die dankesListe im Vorletzten Post ergänzt ...

Danke nochmal
 
O
Ein Ausdruck ist definiert als Term mit Option + oder - Ausdruck

a = b
optional: a = b + a
optional: a = b - a
Ja, aber beachten, daß das ganze verschachtelt werden kann.

Vermutlich hast Du noch Fehler drin, denn nach Deiner BNF wäre das ein legaler Ausdruck.
Code:
5678sinsinsinx^y56sin*5+12sinx^y3
 
Code:
5678sinsinsinx^y56sin*5+12sinx^y3

Ich denke, dass das unser Evaluator schaffen muss, wenn er fertig ist.