Once reglas

JCG (27 May 2003) Yet another Tcl Endekalogue translation, this time to Spanish.

I've added some small clarifications where I've felt they fit. I've also referenced the English words for many common terms (such as quote) just to make it clear what the translation refers to; moreover, sometimes I've used the English term (notably in the case of script).

AMG: When revision 14 was written, all non-ASCII characters were damaged. I restored them; hopefully I haven't introduced any spelling or formatting errors. Please be mindful of your browser's encoding when editing pages on this wiki. All these pages are sent to your browser in UTF-8; make sure your browser interprets them as such, or else they will appear mangled. If you edit a page using a misconfigured browser, the mangled characters will be saved to the wiki, making them wrong for everybody.


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.

8. Sustitución de barra invertida. Si una barra invertida (<<\>>) aparece dentro de una palabra, entonces tiene lugar la sustitución de barra invertida. En todos los casos excepto en los que se detallan explícitamente a continuación, la barra invertida se elimina y el caracter siguiente se trata como un caracter ordinario que se deja dentro de la palabra. Este mecanismo permite que determinados caracteres como las comillas, corchetes cuadrados derechos o símbolos de dólar aparezcan en las palabras sin desencadenar ningún procesamiento especial. La tabla que sigue detalla las secuencias de barra invertida que se procesan de forma especial junto al valor que sustituye a cada secuencia:

  • \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.

9. Comentarios. Si un caracter hash (<<#>>) aparece en una posición donde Tcl espera el primer caracter de la primera palabra de un comando, entonces el propio caracter hash y el resto de caracteres que le siguen hasta el siguiente final de línea se consideran un comentario y son ignorados. Nótese que el caracter de comentarios sólo tiene esta interpretación cuando aparece al principio de un comando.

10. Orden de las sustituciones. En el proceso de crear las palabras de un comando, Tcl procesa cada caracter una y sólo una vez. Por ejemplo, si tiene lugar una sustitución de variable, el valor así sustituido no sufre nuevas sustituciones sino que se incorpora a su palabra tal cual. Si ocurre la sustitución de un comando, el comando anidado se procesa en su totalidad por una llamada recursiva al intérprete de Tcl sin que se efectúen sustituciones ni antes de invocar la llamada recursiva ni sobre el resultado del script anidado.

Las sustituciones tienen lugar de izquierda a derecha y cada una se evalúa completamente antes de proceder con la siguiente. Por tanto, el comando

 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 ]