Announcement

Collapse
No announcement yet.

Suchen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Suchen

    Hallo!

    Ich versuche zur Zeit für mich einen Synthax-Checker
    mit Java zu Programmieren. Ich bin allerdings mit
    Java noch nicht so vertraut. Wie könnte man
    beispielswiese im Programm-Code(den zum Überprüfen)
    nach einer nicht geschlossene geschweifte Klammer suchen lassen. Oder
    wie könnte man überprüfen ob das Semikolon auch an der richtigen Stelle
    steht.
    Vielleicht hat jemand bereits Erfahrung und kann mir Tipps geben???
    Trotzdem Vielen Dank für die Aufmerksamkeit.
    Grüße

  • #2
    Hallo.

    Es kommt natürlich auf Deine Strategie bei Parsen an. Baust Du einen Baum auf? Top-Down- oder Bottom-Up-Analyse? Oder wie willst Du vorgehen.

    Mit dem StringTokenizer kannst Du zum Beispiel einen String in einzelne Sub-Strings zerlegen. Dafür mußt Du ein Trennzeichen angeben, z.B. das Semikolon.

    In Deinem Fall bietet es sich aber wahrscheinlich an, den String von vorne nach hinten zu durchlaufen, Dir die Positionen der letzten öffnenden Klammern zu merken und bei der nächsten schließenden den durch diese Positionen markierten Teil-String mit subString() herauszukopieren, um Dir damit den Syntaxbaum aufzubauen. Ohne den wird es schwierig, den Ausdruck auf die Grammatik hin zu überprüfen.
    Diesen subString kannst oder mußt (ich weiß ja nicht, was Du machen willst) Du dann weiter untersuchen, um ihn zum Beispiel in Operand, Operator, Operant aufzuspalten. Da bietet sich Rekursion an.

    Z.B.: ((6 * 4) + 3)
    Du speicherst Dir die Position 0 der ersten öffnenden Klammer und läufst weiter. Die Position 1 der zweiten öffnenden speicherst Du Dir ebenfalls. Wenn Du bei der ersten schließenden ankommst (Position 7) kopierst Du Dir den Teil 1 bis 7 heraus und löschst Dein Vermerk über die Position 1. Das Komplizierte ist es in diesem Fall, eine elegante Methode für das Auseinandernehmen der Teile und das Aufbauen des Baums aus diesen Teilen zu entwerfen.
    Am Ende solltest Du einen Baum haben, dessen Wuzel den Operator + repräsentiert, und als Operanden einen Knoten und ein Blatt (nämlich die 3) hat. Der Knoten wiederum repräsentiert den Operanden * und hat die Operanden 6 und 4. Ein Knoten muß demnach die Operation und zwei Operanden speichern können.
    Ein Fehler im Ausdruck stellst Die Methode, die den Baum aufbaut fest, indem ihr der Operator oder ein Operand fehlt oder die Klammerstruktur, daß heißt die Rekursion über immer feinere Teil-Ausdrücke nicht aufgeht.

    Da hast Du eine interessante Aufgabe. Viel Spaß damit

    Comment

    Working...
    X