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:

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Danke schon mal, ich warte noch ein bisschen auf Feedback und im Falle, dass nichts dabei raus kommt, schreibe ich ihm mal eine PM ...
 

ZENcom

Goldener Apfel der Eris
Registriert
30.03.06
Beiträge
2.600
…unser Java-Entwickler vor dem Herrn ;)
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
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
 

kauan

Stina Lohmann
Registriert
31.12.05
Beiträge
1.043
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
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
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 o_O

Danke noch mal für Deine Mühen. Für weitere Tips bin ich immer dankbar :)
 

kauan

Stina Lohmann
Registriert
31.12.05
Beiträge
1.043
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
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Stimmt, es muss auch
  • Element ::= Wert | '(' Ausdruck ')'
heissen. Sorry.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
Kann mir jemand mal auf Deutsch vermitteln, was das genau heissen soll?
BNF lernen und wenn Du das darfst so ein Tool wie antlr verwenden, das frißt die BNF-Syntax direkt und schmeißt dir den passenden Analyser&Parser raus.
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
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 :)
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Tatsächlich. Den habe ich wirklich übersehen :) ... habe sofort die dankesListe im Vorletzten Post ergänzt ...

Danke nochmal
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
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
 

VersatileMind

Uelzener Rambour
Registriert
05.11.06
Beiträge
366
Code:
5678sinsinsinx^y56sin*5+12sinx^y3

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