Trilhas
/
Tcl
Tcl
/
Exercícios
/
Brackets Correspondentes
Brackets Correspondentes

Brackets Correspondentes

Fácil

Introdução

Você tem a oportunidade de escrever software para o Bracketeer™, um mainframe antigo, mas poderoso. O software que roda nele é escrito em uma linguagem proprietária. Grande parte da sintaxe é familiar, mas você percebe muitos colchetes, chaves e parênteses. Apesar de o Bracketeer™ ser poderoso, ele não tem flexibilidade. Se o código-fonte tiver qualquer colchete, chave ou parêntese desbalanceado, o Bracketeer™ trava e precisa ser reiniciado. Para evitar esse cenário, você começa a escrever um código capaz de verificar se colchetes, chaves e parênteses estão balanceados antes de tentar rodá-lo no Bracketeer™.

Instruções

Dada uma string que contém colchetes [], chaves {}, parênteses () ou qualquer combinação deles, verifique se todos os pares estão corretamente pareados e aninhados. Quaisquer outros caracteres devem ser ignorados. Por exemplo, "{what is (42)}?" está balanceada e "[text}" não está.

O Tcl é uma linguagem muito simples, mas a forma como o intérprete analisa o código tem alguns casos extremos desagradáveis.

Chaves

No Tcl, as chaves são simplesmente uma forma de delimitar um bloco de texto; esse texto pode ser interpretado como código ou como dados. Dentro das chaves, podem aparecer chaves aninhadas, mas as chaves aninhadas precisam estar balanceadas. A página de manual do Tcl diz o seguinte:

As chaves se aninham dentro da palavra: para cada chave de abertura adicional deve haver uma chave de fechamento adicional (no entanto, se uma chave de abertura ou de fechamento dentro da palavra estiver escapada com uma barra invertida, ela não é contada na localização da chave de fechamento correspondente).

O texto ali é bem específico: se você quiser ter um caractere de chave de abertura ou de fechamento sem par, ele precisa ser escapado com uma barra invertida. Então não faça isto:

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

Você precisa fazer isto

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

Isso pode ser problemático por causa da forma como o Tcl analisa comentários, que é diferente da maioria das linguagens. Há mais discussão na wiki do Tcl.

Colchetes

Da mesma forma, como o Tcl usa colchetes para substituição de comandos, mesmo dentro de strings entre aspas duplas, você precisa tomar cuidado ao escapar colchetes de abertura.

Parênteses

Com exceção das variáveis de array associativo, os parênteses são simplesmente caracteres comuns.


Fonte

Ginna Baker
Editar via GitHub O link abre em uma nova janela ou aba
Tcl Exercism

Tudo pronto para começar Brackets Correspondentes?

Crie sua conta no Exercism para aprender e dominar Tcl com 135 exercícios e mentoria humana de verdade, tudo de graça.