Parcours
/
Tcl
Tcl
/
Exercices
/
Parenthèses équilibrées
Parenthèses équilibrées

Parenthèses équilibrées

Facile

Introduction

Tu as l'occasion d'écrire un logiciel pour le Bracketeer™, un mainframe ancien mais puissant. Le logiciel qui tourne dessus est écrit dans un langage propriétaire. Sa syntaxe est en grande partie familière, mais tu remarques beaucoup de crochets, d'accolades et de parenthèses. Bien que le Bracketeer™ soit puissant, il manque de flexibilité. Si le code source contient des crochets, des accolades ou des parenthèses qui ne sont pas équilibrés, le Bracketeer™ plante et doit être redémarré. Pour éviter un tel scénario, tu commences à écrire du code capable de vérifier que les crochets, les accolades et les parenthèses sont équilibrés avant d'essayer de l'exécuter sur le Bracketeer™.

Instructions

Étant donné une string contenant des crochets ([]), des accolades ({}), des parenthèses (()), ou n'importe quelle combinaison de ceux-ci, vérifie que toutes les paires sont correctement appariées et imbriquées. Tous les autres caractères doivent être ignorés. Par exemple, "{what is (42)}?" est équilibré et "[text}" ne l'est pas.

Tcl est un langage très simple, mais la façon dont l'interprète analyse le code comporte quelques cas limites particulièrement pénibles.

Les accolades

Les accolades en Tcl sont simplement une façon de citer un bloc de texte : ce texte peut être interprété comme du code ou comme des données. À l'intérieur des accolades, des accolades imbriquées peuvent apparaître, mais elles doivent être équilibrées. La page de manuel de Tcl dit ceci :

Les accolades s'imbriquent à l'intérieur du mot : pour chaque accolade ouvrante supplémentaire, il doit y avoir une accolade fermante supplémentaire (toutefois, si une accolade ouvrante ou fermante à l'intérieur du mot est précédée d'un backslash, elle n'est pas prise en compte pour localiser l'accolade fermante correspondante).

La formulation est très précise : si tu veux avoir un caractère d'accolade ouvrante ou fermante non apparié, il doit être précédé d'un backslash. Donc ne fais pas ceci :

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

Tu dois faire ceci

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

Cela peut poser problème avec la façon dont Tcl analyse les commentaires, qui diffère de celle de la plupart des langages. On trouve une discussion plus poussée sur le wiki de Tcl.

Les crochets

De même, comme Tcl utilise les crochets pour la substitution de commandes., même à l'intérieur de chaînes entre guillemets doubles, tu dois faire attention à échapper les crochets ouvrants.

Les parenthèses

À l'exception des variables de tableau associatif, les parenthèses sont de simples caractères ordinaires.


Source

Ginna Baker
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Tcl Exercism

Prêt à commencer Parenthèses équilibrées ?

Inscris-toi sur Exercism pour apprendre et maîtriser Tcl avec 135 exercices, et un vrai mentorat humain, le tout gratuitement.