Tracks
/
Tcl
Tcl
/
Übungen
/
Passende Klammern
Passende Klammern

Passende Klammern

Einfach

Einführung

Du bekommst die Gelegenheit, Software für den Bracketeer™ zu schreiben, einen uralten, aber leistungsstarken Großrechner. Die Software, die darauf läuft, ist in einer proprietären Sprache geschrieben. Viel von ihrer Syntax kommt dir bekannt vor, aber dir fallen viele Klammern auf: eckige Klammern, geschweifte Klammern und runde Klammern. So mächtig der Bracketeer™ auch ist, es fehlt ihm an Flexibilität. Wenn der Quellcode irgendeine nicht ausgeglichene eckige Klammer, geschweifte Klammer oder runde Klammer enthält, stürzt der Bracketeer™ ab und muss neu gestartet werden. Um ein solches Szenario zu vermeiden, fängst du an, Code zu schreiben, der prüfen kann, ob eckige Klammern, geschweifte Klammern und runde Klammern ausgeglichen sind, bevor du versuchst, ihn auf dem Bracketeer™ auszuführen.

Anleitung

Gegeben ist ein String, der eckige Klammern [], geschweifte Klammern {}, runde Klammern () oder eine beliebige Kombination davon enthält. Prüfe, ob alle Paare korrekt gepaart und verschachtelt sind. Alle anderen Zeichen werden ignoriert. Zum Beispiel ist "{what is (42)}?" ausgeglichen und "[text}" nicht.

Tcl ist eine sehr einfache Sprache, aber die Art und Weise, wie der Interpreter Code parst, hat ein paar unangenehme Randfälle.

Geschweifte Klammern

Geschweifte Klammern sind in Tcl einfach eine Möglichkeit, einen Textblock zusammenzufassen. Dieser Text kann als Code oder als Daten interpretiert werden. Innerhalb geschweifter Klammern dürfen verschachtelte Klammern vorkommen, aber die verschachtelten Klammern müssen ausbalanciert sein. In der Tcl-Manpage steht dazu:

Klammern verschachteln sich innerhalb des Wortes: für jede zusätzliche öffnende Klammer muss es eine zusätzliche schließende Klammer geben (wenn jedoch eine öffnende oder schließende Klammer innerhalb des Wortes mit einem Backslash maskiert ist, wird sie beim Auffinden der passenden schließenden Klammer nicht gezählt).

Die Formulierung dort ist recht genau: Wenn du ein nicht zugeordnetes öffnendes oder schließendes Klammerzeichen haben willst, muss es mit einem Backslash maskiert werden. Also mach das hier nicht:

proc isOpenBrace {char} {
    return [expr {$char eq "{"}]
    # ......................^ will not work
}

So musst du es machen:

proc isOpenBrace {char} {
    return [expr {$char eq "\{"}]
    # ......................^^ will work
}

Das kann in Verbindung mit der Art und Weise, wie Tcl Kommentare parst, problematisch sein, denn das unterscheidet sich von den meisten Sprachen. Mehr dazu steht im Tcl-Wiki.

Eckige Klammern

Ebenso: Da Tcl eckige Klammern für die Befehlssubstitution. verwendet, sogar innerhalb von Zeichenketten in doppelten Anführungszeichen, musst du beim Maskieren öffnender Klammern aufpassen.

Runde Klammern

Mit Ausnahme von assoziativen Array-Variablen sind runde Klammern einfach gewöhnliche Zeichen.


Quelle

Ginna Baker
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Tcl Exercism

Bereit, mit Passende Klammern zu starten?

Melde dich bei Exercism an, um Tcl mit 135 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.