Home Mappa Indice Ricerca Notizie Archivio Link A proposito di LF
[Barra Superiore]
[Barra Inferiore]
[Foto dell'autore]
di Brent B. Welch

L´autore:
Brent Welch si diverte a costruire il sito web www.scriptics.com, che comprende un database (con note) di URL relative a Tcl (il Centro Risorse di Tcl, Tcl Resource Center) e l'infrastruttura per il commercio elettronico per il prodotto TclPro. Ha anche scritto diverse grosse applicazioni in Tcl/Tk, compreso il server web TclHttpd, usato su www.scriptics.com, l'interfaccia utente per la posta di Exmh e l'editor HTML webtk. E' l'autore di "Practical Programming in Tcl and Tk" (Programmazione pratica in Tcl/Tk). Welch ha conseguito la laurea in Ingegneria Aeronautica all'Università del Colorado, Boulder, nel 1982; un master in Informatica all'Università della California, Berkeley, nel 1986 e un PhD in Informatica sempre a Berkeley nel 1990. Precedentemente Welch è stato un membro dello staff di ricerca allo Xerox PARC, dove lavorava sui sistemi distribuiti, e successivamente un membro della squadra di Tcl/Tk presso i Sun Microsystems Laboratories. E' un membro di ACM e della IEEE Computer Society. Home Page: http://www.beedub.com/

Contenuto:

La sintassi di Tcl

[Illustrazione]

Sommario:

Questo articolo spiega i concetti di base e la sintassi del linguaggio Tcl.



 

Un'introduzione alla sintassi di Tcl

Per essere un linguaggio di scripting, Tcl ha una sintassi semplice.

cmd arg arg arg
Un comando di Tcl è formato da parole separate da spazi. La prima parola è il nome del comando e le parole rimanenti sono argomenti del comando.
$pippo
Il carattere dollaro ($) richiama il valore di una variabile. In questo esempio, il nome della variabile è pippo.
[clock seconds]
Le parentesi quadre eseguono un comando annidato. Per esempio, se si vuole passare il risultato dell'esecuzione di un comando come argomento di un altro comando, si usa questa sintassi. In questo esempio, il comando annidato è clock seconds, che restituisce l'ora attuale in secondi.
"some stuff"
I doppi apici raggruppano più parole come singolo argomento di un comando. Il carattere dollaro e le parentesi quadre vengono interpretati anche dentro i doppi apici.
{some stuff}
Anche le parentesi graffe raggruppano più parole in un unico argomento. In questo caso, comunque, gli elementi dentro le parentesi non vengono interpretati.
\
Il backslash (\) va usato come carattere di escape per ottenere i caratteri speciali. Per esempio, \n genera un carattere di ritorno a capo. Il backslash viene anche usato per "spegnere" il significato speciale del carattere dollaro, degli apici, delle parentesi quadre e di quelle graffe.
 

Un piccolo esempio

Ecco un comando Tcl che visualizza l'ora attuale. Usa tre comandi Tcl: set, clock, e puts. Il comando set assegna la variabile. Il comando clock manipola i valori di tempo. Il comando puts visualizza i valori.

set seconds [clock seconds] puts "L'ora attuale è [clock format $seconds]"

Si noti che non si usa il $ quando si assegna un valore ad una variabile; lo si usa solo quando si vuole ottenere il valore della variabile. La variabile seconds non è necessaria nell'esempio precedente. E' possibile visualizzare l'ora corrente con un solo comando:

puts "L'ora attuale è [clock format [clock seconds]]"

 

Raggruppamento e Sostituzione

La sintassi di Tcl viene usata per guidare il parser di Tcl in tre passi: raggruppamento degli argomenti, sostituzione dei risultati e la distribuzione dei comandi.

  1. Raggruppamento degli argomenti. Tcl deve determinare come organizzare gli argomenti del comando. Nel caso più sempilce, gli argomenti sono separati da uno spazio. Come detto prima, la sintassi dei doppi apici e delle parentesi viene usata per raggruppare più parole in un solo argomento. Nell'esempio precedente i dippi apici sono usati per raggruppare un singolo argomento per il comado puts.

  2. Sostituzione dei risultati. Dopo aver raggruppato gli argomenti, Tcl esegue la sostituzione delle stringhe. In parole povere, sostituisce $pippo con il valore della variabile pippo, e sostituisce ai comandi tra parentesi il risultato della loro esecuzione. Il fatto che le sostituzioni vengano fatte dopo il raggruppamento è fondamentale. Questa sequenza assicura che valori insoliti non complichino la struttura dei comandi.

  3. Distribuzione dei comandi. Dopo la sostituzione, Tcl usa il nome del comando come chiave in una tabella di distribuzione e chiama la procedura C identificata nella tabella, che implementa il comando. E' anche possibile scrivere proprie procedure di comando in Tcl. Ci sono semplici convenzioni riguardanti il passaggio degli argomenti e la gestione degli errori.
 

Un altro esempio

Ecco qui un altro esempio:

set i 0 while {$i < 10} { puts "$i squared = [expr $i*$i]" incr i }

Qui le parentesi graffe sono usate per raggruppare gli argomenti senza fare alcuna sostituzione. Il parser di Tcl non sa niente di particolare sul comando while. Lo tratta come qualsiasi altro comando. E' l'implementazione del comando while che sa che il primo argomento è un'espressione, e che il secondo argomento è costituito da altri comandi Tcl. Le parentesi raggruppano due argomenti: l'espressione booleana che controlla il ciclo e i comandi nel corpo del ciclo.

Notiamo anche due espressioni matematiche: il confronto booleano e la moltiplicazione. Il comando while calcola automaticamente il suo primo argomento come un'espressione. Negli altri casi occorre usare esplicitamente il comando expr per effettuare calcoli matematici.  

La distribuzione dei comandi

Infine, Tcl invoca qualcos'altro per fare il grosso del lavoro. Abbiamo visto che Tcl usa expr per calcolare le funzioni matematiche, puts per gestire le funzioni di uscita, e set per assegnare le variabili. Questi comandi Tcl sono implementati da una procedura C che si è registrata in Tcl. Le procedure di comando in C prendono gli argomenti stringa del comando Tcl e restituiscono una nuova stringa come risultato. E' molto facile scrivere procedure di comando in C. Esse possono fare di tutto, da accedere ai database a creare interfacce utente grafiche. Tcl, il linguaggio, non sa affatto cosa fanno i comandi. Si limita a raggruppare argomenti, a sostituire i risultati e a distribuire i comandi.  

Un ultimo esempio

Ecco la procedura fattoriale:

proc fac {x} {
    if {$x < 0} {
        error "Invalid argument $x: must be a positive integer"
    } elseif {$x <= 1} {
        return 1
    } else {
        return [expr $x * [fac [expr $x-1]]]
    }
}


 

Approfondimenti

Articolo tratto da: Scriptics
Sito web mantenuto dal Team degli Editori di LinuxFocus
© Brent B. Welch
LinuxFocus 1999

1999-10-14, generated by lfparser version 0.7