[RS] boldly starts this Italian translation of the [Endekalogue] with what Babelfish makes out of man Tcl, and fixes some evident blunders. Coloro di madrelingua italiana sono pregati di migliorare il lavoro fatto finora. ---- Le seguenti regole definiscono la sintassi e la semantica del linguaggio Tcl: '''(1) Comandi:''' Un programma Tcl è una stringa che contiene uno o più comandi. I punto e virgola e le andate a capo, 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 è 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 è 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 andata a capo, che sono segni di separazione tra comandi). '''(4) Doppi apici:''' Se il primo carattere di una parola è un doppio apice ("), allora la parola è terminata dal doppio apice successivo. Se i punti e virgola, parentesi graffe chiuse o caratteri bianchi (comprese le andate a capo) 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 (\) è 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 è una graffa aperta ({), la parola stessa è 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 è quotata con una barra inversa, non è considerata nell'individuazione della prossima graffa chiusa). Nessuna sostituzione è effettuata sui caratteri fra parentesi graffe tranne le sostituzioni di caratteri di andata a capo quotati con barra inversa come descritto di seguito; punti e virgola, caratteri di andata a capo, graffe chiuse e spazi bianchi non vengono interpretati in modo speciale. La parola consisterà 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 è invocato ricorsivamente per elaborare i caratteri che seguono la quadra aperta come programma Tcl. Il programma può contenere un qualsiasi numero di comandi e deve essere terminato da una quadra chiusa (]]). Il risultato del programma (cioè il risultato del suo ultimo comando) è sostituito nella parola al posto delle quadre e di tutti i caratteri tra esse compresi. Ogni singola parola può richiedere un numero qualsiasi di sostituzioni di comando. La sostituzione dei comandi non è 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 può presentare le seguenti forme. $nome ''nome'' è il nome di una variabile scalare; un nome è una sequenza composta da uno o più dei seguenti tipi di carattere: lettera, cifra, carattere di sottolineatura o separatore di ''namespace'' (due o più due punti). $nome(indice) ''nome'' è il nome di una variabile vettore (array) e ''indice'' è 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 può 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'' è il nome di una variabile scalare. Può contenere qualsiasi carattere tranne le parentesi graffe chiuse. Ogni singola parola può richiedere un numero qualunque di sostituzioni di variabile. La sostituzione di variabile non è effettuata sulle parole racchiuse tra parentesi graffe. '''(8) Sostituzione dei caratteri quotati con barra inversa:''' Una particolare sostituzione è eseguita se una barra inversa (\) compare all'interno di una parola. In tutti i casi, tranne quelli descritti di seguito, la barra inversa è scartata e il carattere che segue è trattato come un carattere ordinario ed incluso nella parola. Ciò 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). \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 è unica in quanto è sostituita in un passo precendente all'effettiva analisi del comando. Ciò significa che sarà sostituita anche quando si presenta fra parentesi graffe e lo spazio risultante sarà trattato come un separatore di parola se non è 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 sarà inserito. I bit più significativi del carattere Unicode saranno posti a zero. \xhh Le cifre esadecimali ''hh'' forniscono un valore a otto bit per il carattere Unicode che sarà inserito. Qualsiasi numero di cifre esadecimali può essere presente; tuttavia, tutti tranne gli ultimi due sono ignorati (il risultato è sempre una quantità di un byte). I bit più 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 sarà inserito. Questo tipo di sostituzione non è 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 è interpretato come inizio di commento soltanto quando compare all'inizio di un comando. '''(10) Ordine di sostituzione:''' Ogni carattere è 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 è eseguita sul valore della variabile: il valore è inserito nella parola così com'è; nella sostituzione di comando: un comando nidificato è elaborato interamente dalla chiamata ricorsiva all'interprete Tcl, nessuna sostituzione è eseguita prima della chiamata ricorsiva e nessuna sostituzione supplementare è eseguita sul risultato del programma nidificato. Le sostituzioni avvengono da sinistra a destra ed ogni sostituzione è valutata completamente prima di tentare di valutare la seguente. Quindi, una sequenza come set y [set x 0][incr x][incr x] ;# (1) imposterà 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... ;) ---- [Natural languages] | [Arts and crafts of Tcl-Tk programming]