1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Wer kann das interpretieren?

Dieses Thema im Forum "OS X-Developer" wurde erstellt von VersatileMind, 06.01.07.

  1. VersatileMind

    VersatileMind Uelzener Rambour

    Dabei seit:
    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.
     
    #1 VersatileMind, 06.01.07
    Zuletzt bearbeitet: 06.01.07
  2. ZENcom

    ZENcom Goldener Apfel der Eris

    Dabei seit:
    30.03.06
    Beiträge:
    2.650
  3. VersatileMind

    VersatileMind Uelzener Rambour

    Dabei seit:
    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 ...
     
  4. ZENcom

    ZENcom Goldener Apfel der Eris

    Dabei seit:
    30.03.06
    Beiträge:
    2.650
    …unser Java-Entwickler vor dem Herrn ;)
     
  5. Nogger

    Nogger Damasonrenette

    Dabei seit:
    05.11.05
    Beiträge:
    494
  6. kauan

    kauan Stina Lohmann

    Dabei seit:
    31.12.05
    Beiträge:
    1.043
    Das Problem ist wohl nicht Deutsch -> Java (das waere leicht) sondern Mathematik -> Deutsch ;)
    Bin auch gerade in der Wikipedia am blaettern, da findet sich das bestimmt.
     
  7. VersatileMind

    VersatileMind Uelzener Rambour

    Dabei seit:
    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
     
  8. kauan

    kauan Stina Lohmann

    Dabei seit:
    31.12.05
    Beiträge:
    1.043
    Okay, ich habe es vielleicht verstanden. Uebernehme aber null Gewaehr ob das wirklich stimmt.

    Ausdruck a = Term b, optional gefolgt von +Ausdruck a oder -Ausdruck a
    z.B.
    a = b
    a = b + a

    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

    Das verstehe ich nicht

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

    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
     
  9. VersatileMind

    VersatileMind Uelzener Rambour

    Dabei seit:
    05.11.06
    Beiträge:
    366
    Also erst einmal vielen Dank ... das hilft mir auf jeden Fall ein Stückchen weiter.

    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 :)
     
  10. ZENcom

    ZENcom Goldener Apfel der Eris

    Dabei seit:
    30.03.06
    Beiträge:
    2.650
    Valou gefällt das.
  11. kauan

    kauan Stina Lohmann

    Dabei seit:
    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
     
  12. VersatileMind

    VersatileMind Uelzener Rambour

    Dabei seit:
    05.11.06
    Beiträge:
    366
    Stimmt, es muss auch
    • Element ::= Wert | '(' Ausdruck ')'
    heissen. Sorry.
     
  13. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.250
    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.
     
  14. VersatileMind

    VersatileMind Uelzener Rambour

    Dabei seit:
    05.11.06
    Beiträge:
    366
    Super. Danke für den Tip. Jetzt weiß ich zumindest mal, was das für eine Notation ist. Und nein, wir müssen den Evaluator und den Scanner selbst schreiben.
     
  15. VersatileMind

    VersatileMind Uelzener Rambour

    Dabei seit:
    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.

    Ein Ausdruck ist definiert als Term mit Option + oder - Ausdruck

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



    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



    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



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

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


    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 :)
     
  16. kauan

    kauan Stina Lohmann

    Dabei seit:
    31.12.05
    Beiträge:
    1.043
    Diesen Post hast du wahrscheinlich ueberlesen :)
     
  17. VersatileMind

    VersatileMind Uelzener Rambour

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

    Danke nochmal
     
  18. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.250
    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
    
     
  19. VersatileMind

    VersatileMind Uelzener Rambour

    Dabei seit:
    05.11.06
    Beiträge:
    366
    Code:
    5678sinsinsinx^y56sin*5+12sinx^y3
    Ich denke, dass das unser Evaluator schaffen muss, wenn er fertig ist.
     

Diese Seite empfehlen