Die Tcl Syntax

ArticleCategory: [Artikel Kategorie]

Software Development

AuthorImage:[Bild des Autors]

[Photo of the Author]

TranslationInfo:

Original in en Brent B. Welch

en to de:Harald Radke

AboutTheAuthor:[Über den Autor]

Brent Welch Lieblingsbeschäftigung ist die Pflege der www.scriptics.com Website, welche unter anderem kommentierte Verweise auf URLs enthält, die sich mit Tcl beschäftigen (das Tcl Resource Center). Ausserdem findet man dort die E-Commerce Infrastruktur für TclPro. Brent entwickelte einige grosse Tcl/Tk Applikationen, darunter der WWW Server TclHttpd, welcher auch auf www.scripts.com läft, das E-Mail Benutzerinterface Exmh und der HTML Editor webtk. Desweiteren ist er der Autor von "Practical Programming in Tcl and Tk". Welch machte seinen Abschluss in Luft- und Raumfahrttechnik an der Universität von Colorado, Boulder, 1982, promovierte in Informatik in Berkeley 1986 und wurde 1990 Professor für Informatik, ebenfalls in Berkeley. Vorher war Brent Mitglied des Forschungsteams von Xerox PARC, wo er an verteilten Systemen arbeitete. Später wechselte er zum Tcl/Tk Team bei Sun Microsystems Er ist Mitglied des ACM und der IEEE Computer Gesellschaft. Home Page: http://www.beedub.com/

Abstract:[Zusammenfassung]

Dieser Artikel erlätert dem Leser die grundlegenden Konzepte und die Syntax der Tcl Skriptsprache.

ArticleIllustration:[Titelbild des Artikels]

[Ilustration]

ArticleBody:[Der eigentliche Artikel]

Einführung in die Syntax von Tcl

Für eine Scriptsprache besitzt Tcl eine vergleichsweise einfache Syntax.

cmd arg arg arg
Ein Tcl Befehl besteht aus einer Reihe von Wörtern, welche durch Leerzeichen getrennt werden. Das erste Wort ist hierbei der Befehlsname, gefolgt von den Argumenten des Befehls.
$foo
Das Dollarzeichen ($) substitutiert eine Variable durch ihren augenblicklichen Wert, In diesem Fall wird der Wert der Variable foo verwendet.
[clock seconds]
Eckige Klammern führen verschachtelte Befehle aus. Diese Syntax wird zum Beispiel verwendet, wenn das Ergebnis eines Befehles als Argument an ein anderes Kommando übergeben werden soll. Im obigen Beispiel wird durch [clock seconds] die gegenwärtige Zeit in Sekunden ausgegeben.
"some stuff"
Eine Gruppe von Worten, welche in Anführungszeichen gefasst sind, werden als ein einziges Argument eines Befehles interpretiert. Hier bei werden Dollarzeichen und eckige Klammern, welche sich zwischen den Anführungszeichen befinden, wie gehabt ausgewertet.
{some stuff}
Ebenso fassen geschweifte Klammern mehrere Worte zu einem einzigen Argument eines Befehles zusammen, jedoch findet hier keine Auswertung der Elemente zwischen den Klammern statt.
\
Der Backslash (\) wird für Sonderzeichen wie zum Beispiel \n (Zeilenumbruch) verwendet. Desweiteren unterdrükt er die Auswertung von Dollarzeichen, Anführungszeichen, eckigen und geschweiften Klammern.

Ein kleines Beispiel

Das folgende Tcl Kommando gibt die aktuelle Zeit aus. Es werden drei Tcl Befehle verwendet: set, clock und puts. Der Befehl set weist der Variablen ihren Wert zu. Mit dem clock Befehl werden Zeitwerte manipuliert. Zum Schluss gibt der Befehl puts einen String und den Wert der Variable aus.

set seconds [clock seconds] puts "Aktuelle Zeit: [clock format $seconds]"

Note that you do not use $ when assigning to a variable. Man beachte, dass das Dollarzeichen nur bei der Verwendung des Wertes einer Variable, nicht aber bei deren Zuweisung benutzt wird. Eigentlich ist die Variable seconds in diesem Beispiel gar nicht notwendig, die gegenwärtige Zeit kann auch wie folgt ausgegeben werden:

puts "Aktuelle Zeit: [clock format [clock seconds]]"

Anordung von Argumenten und Auswertung

Der Tcl Parser durchläft, gesteuert durch die Syntax, drei Phasen: Anordnung der Argumente, Substitution der Ergebnisse und Ausführung der mit dem Befehl verbundenen Routine.

  1. Anordnung der Argumente. Tcl muss zuerst die Organisation der Argumente eines Befehles herausfinden. Im einfachsten Fall werden Argumente durch Leerzeichen voneinander getrennt. Wie schon gezeigt, können aber auch mehrere Worte durch Anführungszeichen und Klammern als ein einziges Argument üb;ergeben werden. Im vorhergehenden Beispiel wurden Anführungszeichen verwendet, um eine Reihe von Worten als ein Argument des puts Befehles zu übergeben.

  2. Substitution von Ergebnissen. Nach der Anordnung der Argumente, wird die Substitution von Zeichenketten durchgeführt. Einfach gesagt wird $foo durch den Wert der Variable foo ersetzt und geklammerte Befehle durch ihre Ergebnisse ersetzt. Diese Reihenfolge, erst die Anordnung der Argumente und erst danach die Auswertung, ist sehr wichtig, da so die Struktur von Kommandos auch durch ungewöhnliche Werte nicht komplizierter wird.

  3. Auswertung der Befehle. Nach der Substitution ruft Tcl die C Prozedur auf, welche dem Kommandonamen zugeordnet ist. Dazu durchläft Tcl eine Tabelle, in welcher alle Zuordnungen zwischen Befehlsnamen und C Prozedur eingetragen sind. Die C Prozedur realisiert dann den Befehl. Es können auch eigene Befehlsprozeduren in Tcl erstellt werden. Hierbei exisiteren einfache Konventionen für die Übergabe von Argumenten und die Fehlerbehandlung.

Ein weiteres Beispiel

Hier ein weiteres Beispiel:

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

Hier werden geschweifte Klammern für die Anordnung von Argumenten verwendet, ohne dass irgendeine Auswertung stattfindet. Der Tcl Parser behandelt den while wie jedes andere Kommando auch, ohne ihn speziell zu behandeln. Die Implementierung des while commandos ist es, die weiss, dass das erste Argument ein Ausdruck und das zweite Argument eine Folge von weiteren Tcl Kommandos ist. Die Klammern bilden zwei Argumente: einen boolschen Ausdruck, welcher die Schleife steuert und die Kommandos im Schleifenrumpf.

Hier sind zwei mathematische Ausdrücke zu sehen: ein boolscher Vergleich und eine Multiplikation. Der while Befehl wertet automatisch sein erstes Argument als einen Ausdruck aus. Sollen hingegen mathematische Berechnungen ausgeführt werden, so muss explizit der Befehl expr benutzt werden.

Befehlsauswertung

Im Endeffekt lässt Tcl jemand anderen die richtige Arbeit machen. Es wurde gezeigt, dass Tcl expr für die Auswertung mathematischer Ausdrücke, puts für die Ausgabe und set für die Zuweisung von Variablen verwendet. Diese Tcl Befehle werden durch C Prozeduren realisiert, welche bei Tcl registriert sind. Die C Prozeduren übernehmen die Zeichenkettenargumente des Tcl Befehles und geben eine neue Zeichenkette als Ergebnis zurück. Es ist recht einfach, eigene C Befehlsprozeduren für jeden Aufgabenbereich zu erstellen, sei es für den Zugriff auf Datenbanken oder ein grafisches Benutzerinterface. Tcl selbst, die Sprache also, hat keine Ahnung, was die Kommandos bewirken. Sie ordnet lediglich Argumente an, substituiert Ergebnisse und wertet Befehle aus.

Ein letztes Beispiel

Eine Prozedur für die Berechnung der Fakultät:

proc fac {x} {
    if {$x < 0} {
        error "Ungültiges Argument $x: muss ein positiver Integer Wert sein"
    } elseif {$x <= 1} {
        return 1
    } else {
        return [expr $x * [fac [expr $x-1]]]
    }
}


Literaturverweise

Grundlage dieses Artikels: Scriptics