'\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: Tcl.n,v 1.3 1999/04/16 00:46:33 stanton Exp $ '\" '\" Translation by Eduardo Ochs, http://angg.twu.net/ '\" .so man.macros .TH Tcl n "8.1" Tcl "Tcl Built-In Commands" .BS .SH NOME Tcl \- Sumário da sintaxe da linguagem Tcl. .BE .SH DESCRIÇÃO .PP As regras abaixo definem a sintaxe e a semântica da linguagem Tcl: .IP [1] Um script Tcl é um string contendo um ou mais comandos. Pontos-e-vírgulas e newlines são separadores de comandos, a menos que estejam "quotados" por chaves, aspas ou contrabarras, como vai ser descrito abaixo. Durante uma "substituição de comando" (veja abaixo) um colchete fechando (``]'') marca o fim de um comando, a não ser que ele esteja quotado. .IP [2] Um comando é avaliado em dois passos. Primeiro o interpretador do Tcl separa o comando em palavras e aplica as substituições descritas abaixo; essas substituições são aplicadas do mesmo modo em todo os comandos. A primeira palavra é usada para determinar a função que vai executar o comando, e todas as outras palavras do comando são passadas como parâmetros para essa função. A função é livre para interpretar as palavras que recebe como parâmetros do modo que quiser, por exemplo como inteiros, nomes de variáveis, listas ou scripts de Tcl. Comandos diferentes interpretam seus parâmetros de modos diferentes. .IP [3] As palavras de um comando são separadas por espaço em branco (exceto por newlines, que são separadores de comandos). .IP [4] Se o primeiro caracter de uma palavra é aspas (``"'') então a palavra é terminada pelas próximas aspas. Se pontos-e-vírgulas, fecha-colchetes, ou caracters de espaço (incluindo newlines) aparecerem dentro de aspas eles são tratados como caracteres normais e incluídos na palavra. Substituições de comandos, substituições de variáveis e substituições de contrabarras são aplicadas nos caracteres entre aspas como descrito abaixo. As aspas não são consideradas como parte da palavra. .IP [5] Se o primeiro caracter de uma palavra é uma chave abrindo (``{'') então a palavra é terminada pela próxima chave fechando. Chaves podem ocorrer aninhadas: para cada ``{'' extra deve ocorrer um ''}'' correspondente para fechá-lo; mas chaves que ocorram quotadas por contrabarras não são contadas por essa regra. Nenhum tipo de substituição ocorre entre chaves, exceto pelas subtituições de pares contrabarra-newline descritas abaixo. Pontos-e-vírgulas, newlines, fecha-colchetes e espaço em branco não recebem nenhum tipo de interpretação especial. A palavra resultante vai ser exatamente os caracteres entre o ``{'' inicial e o ``}'' correspondente, excluindo o ``{'' e o ``}'' das extremidades. .IP [6] Se uma palavra contém um abre-colchetes (``['') então o Tcl aplica uma \fIsubstituição de comando\fR. Para isto o interpretador Tcl invoca a si mesmo recursivamente para processar os caracteres que vem depois do ``['' como um script Tcl. O script pode conter qualquer número de comandos e deve ser terminado por um fecha-colchetes (``]''). O resultado do script (isto é, o resultado do seu último comando) é substituído na palavra no lugar dos colchetes e de todos os caracteres dentro deles. Substituição de comandos não é aplicada em palavras entre chaves. .IP [7] Se uma palavra contém um ``$'' ("dólar") o Tcl aplica uma \fIsubstituição de variável\fR: o dólar e todos os caracteres seguintes são substituídos na palavra pelo valor da variável. Substituições de variáveis podem ser de qualquer uma das formas abaixo: .RS .TP 15 \fB$\fIname\fR \fIName\fR é o nome de uma "variável escalar"; o nome é terminado por qualquer caracter que não seja uma letra, dígito ou um sublinhado (``_''). .TP 15 \fB$\fIname\fB(\fIindex\fB)\fR \fIName\fR dá o nome de uma variável de array e \fIindex\fR dá o nome de um elemento do array. \fIName\fR deve conter somente letras, dígitos e sublinhados. Substituições de comandos, de variáveis e de contrabarras são aplicadas nos caracteres de \fIindex\fR. .TP 15 \fB${\fIname\fB}\fR \fIName\fR é o nome de uma variável escalar. Ele pode conter qualquer caracter exceto por ``}''s. .LP Pode haver qualquer número de substituições de variáveis numa palavra. Substituições de comandos não são aplicadas em palavras entre chaves. .RE .IP [8] Se uma contrabarra (``\e'') aparece numa palavra ocorre uma \fIsubstituição de contrabarra\fR. Em todos os casos exceto os descritos abaixo a contrabarra é descartada e o caracter seguinte é tratado como caracter ordinário e incluído na palavra. O mecanismo de substituição de contrabarras permite que caracteres como aspas, fecha-colchetes e dólares sejam incluídos numa palavra literalmente, sem que eles façam o interpretador entrar em nenhum dos modo especiais de interpretação. A tabela seguinte lista as seqüências de caracteres começadas com contrabarras que são interpretadas de modo especial, e o resultado de suas substituições. .RS .TP 7 \e\fBa\fR Audible alert (bell) (0x7). .TP 7 \e\fBb\fR Backspace (0x8). .TP 7 \e\fBf\fR Form feed (0xc). .TP 7 \e\fBn\fR Newline (0xa). .TP 7 \e\fBr\fR Carriage-return (0xd). .TP 7 \e\fBt\fR Tab (0x9). .TP 7 \e\fBv\fR Vertical tab (0xb). .TP 7 \e\fB\fIespaçoEmBranco\fR . A contrabarra, o newline e todos os caracteres de espaço no começo da linha seguinte (isto é, espaços e tabs) são substituídos por um único espaço. Ao contrário de todas as outras substuições, essas (chamadas de subtituições contrabarras-newlines) são aplicadas numa espécie de estágio de pré-processamento que vem antes do parsing normal, e em que só essas seqüências são consideradas; isso quer dizer que elas são substituídas mesmo quando ocorrem entre chaves, e que o espaço resultante vai ser tratado como separador de palavras se ocorrer fora de chaves e aspas. .TP 7 \e\e Contrabarra (``\e''). .VS 8.1 br .TP 7 \e\fIooo\fR . Os dígitos \fIooo\fR (um, dois ou três deles) são interpretados como um valor em octal de oito bits, e a seqüência é substituída pelo caracter Unicode correspondente. Os bits mais significantes desse caracter octal vão ser 0. .TP 7 \e\fBx\fIhh\fR . Os dígitos hexadecimais \fIhh\fR são interpretados como o código de um caracter Unicode, que é substituído pela seqüência. Qualquer número de dígitos hexadecimais pode estar presente, mas só os dois últimos vão ser considerados; o resultado sempre corresponde a um byte. Os bytes mais significantes do caracter Unicode vão ser 0. .TP 7 \e\fBu\fIhhhh\fR . Os dígitos hexadecimais \fIhhhh\fR (um, dois, três ou quatro dígitos) dão um valor de 16 bits, e o caracter Unicode correspondente é substituído pela seqüência. .VE .LP Substituição de contrabarras não é aplicada em palavras entre chaves, exceto pelas substituições de contrabarra-newlines, como descrito acima. .RE .IP [9] Se uma lasanha (``#'') aparece numa posição em que o Tcl esteja esperando o primeiro caracter da primeira palavra de um comando, então a lasanha e todos os caracteres a seguir, até o fim da linha, são tratados como um comentário e ignorados. A lasanha só é interpretada especialmente, como início de comentário, quando aparece no início de um comando. .IP [10] Cada caracter é processado exatamente uma vez pelo interpretador do Tcl durante a fase de obtenção das palavras de um comando; por exemplo, num trecho onde ocorre uma substituição de variável nenhuma outra substituição é aplicada, e o resultado da substituição de variável é concatenado literalmente à palavra que está sendo formada. Um trecho em que ocorre uma substituição de comando é inteiramente processado pela chamada recursiva ao interpretador do Tcl; nenhuma substituição é aplicada nesse trecho antes da chamada recursiva ao interpretador, e nenhuma substituição adicional é feita sobre o resultado da substituição de comando nesse trecho. .IP [11] As substituições não afetam as separações entre palavras. Por exemplo, durante uma substituição de variável todo o string que corresponde ao valor da variável se torna parte da palavra em que essa variável estava, mesmo que o valor da variável contenha espaços.