Le undici regole

RS boldly starts this Italian translation of the Endekalogue with what Babelfish makes out of man Tcl, and fixes some evident blunders.

Coloro che sono di madrelingua italiana sono pregati di migliorare il lavoro fatto finora.

SS Tried to fix it a bit. There was an error in (1), where the name of ] was exchanged with the name of }. Still not perfect but should be quite easy to understand.


Le seguenti regole definiscono la sintassi e la semantica del linguaggio Tcl:

(1) Comandi: Un programma Tcl e' una stringa che contiene uno o piu' comandi. I punto e virgola e i caratteri di nuova linea, se non quotati, sono segni di separazione tra comandi. I caratteri di parentesi quadra chiusa, se non quotati, delimitano la fine di un comando durante la sua sostituzione (vedi sotto).

(2) Valutazione: Un comando e' valutato in due fasi. Prima l'interprete Tcl separa il comando in parole ed effettua le sostituzioni necessarie come descritto di seguito; tali sostituzioni sono eseguite nello stesso modo per tutti i comandi. La prima parola e' usata per selezionare la procedura utilizzata per eseguire il comando; le altre sono passate come argomenti a questa procedura, che le interpreta come preferisce, ad esempio come: numero intero, nome di variabile, lista di elementi o programma in Tcl. Procedure differenti interpretano in maniera diversa i propri argomenti.

(3) Parole: Le parole in un comando sono separate da uno spazio bianco (esclusi i caratteri di nuova linea, che sono segni di separazione tra comandi).

(4) Doppi apici: Se il primo carattere di una parola e' un doppio apice ("), allora la parola e' terminata dal doppio apice successivo. Se i punti e virgola, parentesi graffe chiuse o caratteri bianchi (compresi i caratteri di nuova linea) compaiono fra virgolette, sono trattati come caratteri ordinari e inclusi nella parola. La sostituzione dei comandi, delle variabili e dei caratteri preceduti dalla barra inversa (\) e' esegiuta sui caratteri fra virgolette come descritto di seguito. I doppi apici presenti all'inizio e alla fine non sono mantenuti come componenti della parola.

(5) Parentesi graffe: Se il primo carattere di una parola e' una graffa aperta ({), la parola stessa e' terminata dalla corrispondente graffa chiusa (}). Queste parentesi si possono annidare all'interno di una parola: per ogni graffa aperta supplementare ce ne deve essere una chiusa (tuttavia: se una graffa aperta o chiusa all'interno della parola e' quotata con una barra inversa, non e' considerata nell'individuazione della prossima graffa chiusa). Nessuna sostituzione e' effettuata sui caratteri fra parentesi graffe tranne le sostituzioni di caratteri di nuova linea quotati con barra inversa come descritto di seguito; punti e virgola, caratteri di nuova linea, graffe chiuse e spazi bianchi non vengono interpretati in modo speciale. La parola consistera' esattamente dei caratteri tra le parentesi graffe esterne, con l'esclusione delle parentesi stesse.

(6) Sostituzione dei comandi: Se una parola contiene una parentesi quadra aperta ([), Tcl esegue una sostituzione di comando; allo scopo l'interprete Tcl e' invocato ricorsivamente per elaborare i caratteri che seguono la quadra aperta come programma Tcl. Il programma puo' contenere un qualsiasi numero di comandi e deve essere terminato da una quadra chiusa (]). Il risultato del programma (cioe' il risultato del suo ultimo comando) e' sostituito nella parola al posto delle quadre e di tutti i caratteri tra esse compresi. Ogni singola parola puo' richiedere un numero qualsiasi di sostituzioni di comando. La sostituzione dei comandi non e' eseguita sulle parole racchiuse tra parentesi graffe.

(7) Sostituzione di variabile: Se una parola contiene un carattere dollaro ($) allora Tcl effettua una sostituzione di variabile: il dollaro e i caratteri seguenti sono sostituiti nella parola col valore di una variabile. La sostituzione di variabile puo' presentare le seguenti forme.

 $nome 

nome e' il nome di una variabile scalare; un nome e' una sequenza composta da uno o piu' dei seguenti tipi di carattere: lettera, cifra, carattere di sottolineatura o separatore di namespace (due o piu' due punti).

 $nome(indice) 

nome e' il nome di una variabile vettore (array) e indice e' il nome di un elemento all'interno di quel vettore. Il nome deve contenere soltanto lettere, cifre, caratteri di sottolineatura e i separatori di namespace e puo' essere una stringa vuota. La sostituzione dei comandi, delle variabili e dei caratteri quotati con barra inversa sono eseguite sui caratteri dell'indice.

 ${nome} 

nome e' il nome di una variabile scalare. Puo' contenere qualsiasi carattere tranne le parentesi graffe chiuse.

Ogni singola parola puo' richiedere un numero qualunque di sostituzioni di variabile. La sostituzione di variabile non e' effettuata sulle parole racchiuse tra parentesi graffe.

(8) Sostituzione dei caratteri quotati con barra inversa: Una particolare sostituzione e' eseguita se una barra inversa (\) compare all'interno di una parola. In tutti i casi, tranne quelli descritti di seguito, la barra inversa e' scartata e il carattere che segue e' trattato come un carattere ordinario ed incluso nella parola. Cio' permette di includere nelle parole caratteri quali le doppie virgolette, le parentesi graffe e i caratteri dollaro, senza innescare un'elaborazione speciale. La seguente tabella presenta le sequenze che sono interpretate in modo speciale, con il valore sostituto ad ogni sequenza.

 \a 

Allarme udibile (campanello) (0x7).

 \b 

Cancellazione del carattere precedente (0x8).

 \f 

Nuova pagina (0xc).

 \n 

Nuova linea (0xa).

 \r 

Ritorno a capo (0xd).

 \t 

Tabulazione (0x9).

 \v 

Tabulazione verticale (0xb).

 \<nuovaLinea>spazioBianco 

Un singolo carattere bianco sostituisce la barra inversa, il carattere di nuova linea e tutti gli spazi e le tabulazioni dopo il carattere di nuova linea. Questa sequenza e' unica in quanto e' sostituita in un passo precendente all'effettiva analisi del comando. Cio' significa che sara' sostituita anche quando si presenta fra parentesi graffe e lo spazio risultante sara' trattato come un separatore di parola se non e' tra graffe o quotato.

 \\ 

Barra inversa (\).

 \ ooo 

Le cifre ooo (una, due o tre) forniscono un valore ottale ad otto bit per il carattere Unicode che sara' inserito. I bit piu' significativi del carattere Unicode saranno posti a zero.

 \xhh 

Le cifre esadecimali hh forniscono un valore a otto bit per il carattere Unicode che sara' inserito. Qualsiasi numero di cifre esadecimali puo' essere presente; tuttavia, tutti tranne gli ultimi due sono ignorati (il risultato e' sempre una quantita' di un byte). I bit piu' significativi del carattere Unicode sono posti a zero.

 \uhhhh 

Le cifre esadecimali hhhh (una, due, tre o quattro) forniscono un valore a sedici bit per il carattere Unicode che sara' inserito.

Questo tipo di sostituzione non e' effettuata sulle parole racchiuse tra parentesi graffe, tranne la barra inversa/nuova linea come descritto in precedenza.

(9) Commenti: Se un carattere diesis (#) si presenta in un punto in cui Tcl si aspetta il primo carattere della prima parola di un comando, il carattere diesis e i caratteri che lo seguono, fino al prossimo carattere di nuova linea, sono trattati come un commento e sono scartati. Il carattere diesis e' interpretato come inizio di commento soltanto quando compare all'inizio di un comando.

(10) Ordine di sostituzione: Ogni carattere e' elaborato esattamente una volta dall'interprete Tcl come componente della generazione delle parole di un comando. Per esempio: nella sostituzione di variabile nessuna ulteriore sostituzione e' eseguita sul valore della variabile: il valore e' inserito nella parola cosi' com'e'; nella sostituzione di comando: un comando nidificato e' elaborato interamente dalla chiamata ricorsiva all'interprete Tcl, nessuna sostituzione e' eseguita prima della chiamata ricorsiva e nessuna sostituzione supplementare e' eseguita sul risultato del programma nidificato.

Le sostituzioni avvengono da sinistra a destra ed ogni sostituzione e' valutata completamente prima di tentare di valutare la seguente. Quindi, una sequenza come

 set y [set x 0][incr x][incr x] ;# (1)

impostera' sempre la variabile y al valore 012.

(11) Sostituzioni e separazione in parole: Le sostituzioni non modificano la separazione in parole di un comando. Per esempio: durante la sostituzione di variabile, l'intero valore della stessa si transforma in parte di una singola parola, anche se il valore della variabile contiene degli spazi.


(1) Babelfish turned this into

 regoli y [ regoli il x][incr x di x 0][incr ]

Better not let it translate your scripts... ;)