Version 8 of Onze regras

Updated 2003-07-28 09:36:39

Luciano ES provides, on July 28 2003, his version of the Endekalogue, in Brazilian Portuguese.


As seguintes regras estabelecem a sintaxe e a semântica da linguagem Tcl:

[1] Comandos

Um script Tcl é composto por uma string que contém um ou mais comandos. O ponto-e-vírgula e o fim da linha são separadores de comandos, a menos que estejam entre aspas, conforme a explicação abaixo. O colchete que fecha um par de colchetes indica o fim de um comando em uma substituição de comando (veja abaixo), a menos que ele esteja entre aspas.

[2] Execução

Comandos são executados em duas etapas. Na primeira passada, o interpretador Tcl divide o comando em palavras e executa substituições conforme explicação abaixo. Essas substituições ocorrem da mesma maneira em todos os comandos. A primeira palavra serve para localizar um procedimento de comando para a execução do comando. Todas as palavras do comando então são passadas para o procedimento do comando. O procedimento do comando é livre para interpretar cada uma de suas palavras como quiser: número inteiro, nome de variável, lista ou script Tcl. Comandos diferentes interpretam suas palavras de formas diferentes.

[3] Palavras

As palavras de um comando são separadas por um espaço (exceto o espaço entre uma linha e outra, que é considerado um separador de comandos).

[4] Aspas duplas

Se o primeiro caractere de uma palavra for as aspas duplas ("), o fim da palavra é demarcado pelo próximo caractere de aspas duplas. Se um ponto-e-vírgula, segundo colchete de um par de colchetes ou espaço (incluindo quebra de linha) estiverem entre as aspas, esses caracteres são tratados como caracteres comuns, que fazem parte da palavra. Caracteres entre aspas estão sujeitos à substituição de comandos, substituição de variáveis e à substituição de barras invertidas, de acordo com a explicação abaixo. As aspas duplas não são consideradas parte da palavra.

[5] Chaves

Se o primeiro caractere de uma palavra for a chave que abre ("{"), o fim da palavra é demarcado pela chave que fecha ("}"). Chaves que abrem dentro de chaves abertas: para cada nova chave que abre, deve haver uma chave que fecha. Mas se qualquer chave (abre ou fecha) aparecer dentro de uma palavra, entre aspas e com a barra invertida, ela não é considerada no casamento dos pares de chaves. Caracteres expressos entre chaves não estão sujeitos a substituições, exceto a barra invertida seguida de quebra de linha, explicada abaixo. Também não se aplica nenhuma interpretação especial ao ponto-e-vírgula, à quebra de linha, ao colchete que fecha ou ao espaço. A palavra consiste em nada mais nada menos que os caracteres expressos entre o par de chaves das extremidades, não incluindo as próprias chaves.

[6] Substituição de comandos

Se uma palavra contiver o colchete que abre ("["), Tcl aplica a "substituição de comandos". O interpretador Tcl percorre e processa todos os caracteres após o colchete que abre como se eles fossem um script Tcl. Esse script pode conter um número ilimitado de comandos, e seu fim é demarcado com o colchete que fecha ("]"). Os colchetes e todos os caracteres expressos entre eles são substituídos pelo resultado do script (i.e. o resultado de seu último comando) dentro da palavra. O número de substituições de comando que podem ocorrer em cada palavra é ilimitado. A substituição de comando não se aplica a palavras expressas entre chaves.

[7] Substituição de variáveis

Se uma palavra contiver o cifrão ("$"), também conhecido como "dólar", Tcl executa a "substituição de variável": o cifrão e os caracteres seguintes na palavra são substituídos pelo valor da variável. A substituição de variável pode ter qualquer um dos seguintes formatos:

    $nome

"Nome" é o nome de uma variável escalar. Esse "nome" é uma seqüência de um ou mais caracteres, que podem ser letras, dígitos, sublinhados (_) ou separadores de namespace (o símbolo de dois pontos expressos duas ou mais vezes seguidas).

    $nome(índice)

"Nome" é o nome de uma variável array, e "índice" indica o nome de um elemento dentro da array. "Nome" deve conter somente letras, dígitos, sublinhados (_) e separadores de namespace, e também pode ser uma string vazia. Os caracteres do índice podem sofrer substituições de comando, variável e barra invertida.

    ${nome}

"Nome" é o nome de uma variável escalar. Ele pode conter qualquer caractere, menos a chave que fecha.

O número de substituições de variável que podem ocorrer em cada palavra é ilimitado. A substituição de variável não se aplica a palavras expressas entre chaves.

[8] Substituição de seqüências com barra invertida

A substituição de seqüências com barra invertida ocorre quando uma barra invertida ("\") aparece dentro de uma palavra. Em todos os casos exceto aqueles descritos abaixo, a barra invertida é removida e o caractere seguinte é tratado como um caractere comum, incluído na palavra. Isso permite que caracteres como aspas duplas, o colchete que fecha e o cifrão sejam incluídos nas palavras sem a aplicação de seus significados especiais. A seguinte tabela relaciona as seqüências com barra invertida que são interpretadas de forma especial e o valor que substitui cada seqüência.

\a Alerta sonoro (campainha) (0x7).

\b Retrocesso (Backspace) (0x8).

\f Avanço de formulário (0xc).

\n Quebra de linha (0xa).

\r Retorno de carro (0xd).

\t Tabulação (0x9).

\v Tabulação vertical (0xb).

\<quebra de linha><espaço em branco> - Um único espaço substitui a barra invertida, quebra de linha e todas as tabulações após a quebra de linha. A seqüência de caracteres com barra invertida tem uma particularidade: ela é substituída em uma etapa à parte, que ocorre antes da etapa de leitura e execução do comando. Isso significa que ela é substituída mesmo quando aparece entre chaves, e o espaço resultante é tratado como um separador de palavra, a menos que ele esteja entre chaves ou aspas.

\\ - Barra invertida ("\").

\ooo - Os dígitos ooo (um, dois ou três deles) indicam o valor octal de oito bits do caractere Unicode que vai ser inserido. O bits mais altos do caractere Unicode são 0.

\xhh - Os dígitos hh em hexadecimal indicam o valor hexadecimal de oito bits do caractere Unicode que vai ser inserido. O número de dígitos hexadecimais que podem ocorrer é infinito, mas todos eles são ignorados, menos os dois últimos (o resultado é sempre um valor de um byte). O bits mais altos do caractere Unicode são 0.

\uhhhh - Os dígitos hexadecimais hhhh (um, dois, três ou quatro deles) indicam o valor hexadecimal de dezesseis bits do caractere Unicode que vai ser inserido.

A substituição de seqüências com barra invertida não ocorre em palavras expressas entre chaves, a não ser a barra invertida seguida de quebra de linha, já explicada acima.

[9] Comentários

Se o primeiro caractere da primeira palavra de um comando for um "sustenido" (#), este sustenido e todos os caracteres seguintes até a próxima quebra de linha são considerados um comentário, i. e. são ignorados. O caractere de comentário só tem significado especial se estiver no início de um comando.

[10] Ordem das substituições

Cada caractere é processado exatamente uma vez pelo interpretador Tcl no processo de criação das palavras de um comando. Por exemplo, se houver substituição de variáveis, nenhuma outra substituição é feita no valor da variável após a substituição. Esse valor é inserido na palavra sem nenhuma outra modificação. Se houver alguma substituição de comando, os comandos dentro do comando são processados pela leitura em "efeito cascata" do interpretador Tcl. Nenhuma substituição é feita antes desse efeito cascata e nenhuma outra substituição é feita no resultado do desdobramento do script.

As substituições são feitas da esquerda para a direita, e nenhuma substituição é feita enquanto a substituição anterior não estiver terminada. Portanto, uma seqüência como…

 set y [[set x 0]][[incr x]][[incr x]]

… sempre fará com que a variável "y" tenha o valor "012".

[11] Limites das substituições e das palavras

As substituições não alteram os limites de cada palavra de um comando. Por exemplo: quando uma variável é substituída, todo o valor correspondente à variável pertence a uma única palavra, mesmo que esse valor contenha espaços.