Las siguientes reglas definen la sintaxis y la semántica del lenguaje Tcl:1. Comandos. Un script Tcl es una cadena con uno o más comandos. Los caracteres punto y coma así como los finales de línea son separadores de comandos, a menos que se protejan (o "escapen"; quote) como se describe más abajo.2. Evaluación. Los comandos se evalúan en dos etapas. En la primera, el intérprete de Tcl fracciona el comando en palabras (words) y hace las sustituciones pertinentes como se describe más abajo. Estas sustituciones se efectúan para todos los comandos de idéntica forma. La primera palabra se utiliza para localizar un procedimiento (command procedure) que será el encargado de ejecutar el comando, y al que se le pasan el resto de las palabras como "argumentos". El procedimiento es libre de interpretar cada una de las palabras como quiera (como enteros, nombres de variables, listas o scripts Tcl); de hecho, distintos procedimientos interpretan sus palabras ("argumentos") de forma diferente.3. Palabras. Las palabras de un comando se separan por caracteres de tipo espacio vacío (white space: espacios, tabuladores y finales de línea), salvo los finales de línea, que son separadores de comandos.4. Comillas dobles. Si el primer caracter de una palabra es una comilla doble (<<">>), entonces la palabra acaba en la siguiente comilla doble. Si entre ambas comillas dobles aparecen puntos y comas, corchetes cuadrados derechos o caracteres de espacio vacío (incluyendo en este caso los finales de línea), éstos son tratados como caracteres ordinarios y, por tanto, como parte de la palabra.5. Llaves. Si el primer caracter de una palabra es una llave izquierda (<<{>>), entonces la palabra acaba en la llave derecha (<<}>>) que casa con la primera. Las llaves se anidan dentro de la palabra: para cada llave izquierda adicional debe haber una llave derecha emparejada; sin embargo, cualquier llave tanto izquierda como derecha dentro de la palabra que este protegida al estar precedida por una barra invertida (backslash, <<\>>) no cuenta para identificar el emparejamiento de llaves. No se efectúan sustituciones en los caracteres entre las llaves, salvo por la sustitución especial de barra invertida seguida por final de línea descrita más abajo; además, los puntos y comas, finales de línea, corchetes cuadrados derechos, o caracteres de espacio vacío no se interpretan aquí de ninguna forma especial.6. Sustitución de comandos. Si una palabra contiene un corchete cuadrado izquierdo (<<[>>), entonces Tcl efectúa ]sustitución de comandos. Para ello, el intérprete de Tcl es invocado recursivamente con el objeto de procesar los caracteres que siguen al corchete cuadrado izquierdo como un script Tcl. Dicho script puede contener cualquier número de comandos y debe estar terminado por un corchete cuadrado derecho (<<>>). El resultado del script (esto es, el resultado de su último comando) se sustituye dentro de la palabra en lugar de ambos corchetes cuadrados y todos los caracteres entre ellos. Puede haber cualquier número de sustituciones de comandos dentro de una palabra. Notesé que la sustitución de comandos no se efectúa en palabras dentro de llaves.7. Sustitución de variables. Si una palabra contiene un símbolo de dólar (<<$>>), entonces Tcl efectúa sustitución de variables: el símbolo de dólar y los caracteres que siguen se sustituyen dentro de la palabra por el valor de una variable. La sustitución de variables puede tener una de las siguientes tres formas:
- $nombre: nombre es el nombre de una variable escalar; el nombre es una secuencia de uno o más caracteres que pueden ser letras, dígitos, el caracter subrayado (<<_>>) o el separador de espacios de nombres (namespaces, dos o más caracteres dos puntos <<:>>).
- $nombre(índice): nombre es el nombre de una variable tabular (array) e índice es el nombre de un elemento dentro de la tabla. nombre debe estar formado por letras, dígitos, caracteres subrayado o separadores de espacios de nombres, y puede ser la cadena vacía. Las sustituciones de comando, de variable y de barra invertida tienen lugar en los caracteres de índice.
- ${nombre}: nombre es el nombre de una variable escalar que puede contener cualquier caracter excepto el de llave derecha.
- \a: Alerta audible (campana) (0x7).
- \b: Retroceso (0x8).
- \f: Avance de página (0xc).
- \n: Línea nueva (0xa).
- \r: Retorno de carro (0xd).
- \t: Tabulador (0x9).
- \v: Tabulador vertical (0xb).
- \<línea nueva><espacio vacío>: Un único espacio sustituye la secuencia formada por una barra invertida, un caracter de línea nueva y todos los espacios o tabuladores que sigan. Esta sustitución de barra invertida es especial en el sentido de que tiene lugar en una pasada especial antes de que el comando se analice (parse). Esto significa que esta sustitución tiene efecto incluso dentro de llaves y que el espacio resultante separará palabras a menos que se encuentre dentro de comillas o llaves.
- \\: Barra invertida (<<\>>).
- \ooo: Los dígitos octales ooo (uno, dos o tres) dan el código de ocho bits del caracter Unicode que será incluido.
- \xhh: Los dígitos hexadecimales hh dan el código de dieciséis bits del caracter Unicode que será incluido. Cualquier número de dígitos hexadecimales pueden aparecer, si bien todos se ignoran salvo los dos últimos (esto es, el resultado es siempre un valor de un octeto: los bits superiores del caracter Unicode será siempre 0).
- \uhhhh: Los dígitos hexadecimales hhhh (uno, dos, tres o cuatro) dan el código de dieciséis bits del caracter Unicode que será incluido.
set y [set x 0][incr x][incr x]siempre resultará¡ en que la variable y tenga el valor 012.11. Sustituciones y fronteras entre palabras. Las sustituciones no afectan a las fronteras entre palabras de un comando. Por ejemplo, como resultado de una sustitución de variable su valor completo forma parte de una única palabra, incluso si el valor de la variable contiene espacios.
[ Category Documentation ]