The Tcl Syntax
ArticleCategory: [Artikel Kategorie]
Software Development
AuthorImage:[Bild des Autors]
AuthorName[Name des Autors]
AboutTheAuthor:[Über den Autor]
Brent Welch is having fun building the www.scriptics.com website, including an annotated database of Tcl-related URLs (the Tcl Resource Center) and the ecommerce infrastructure for the TclPro product. He has also built several large Tcl/Tk applications, including the TclHttpd web server, which runs www.scriptics.com, the Exmh mail user interface and the webtk HTML editor. He is the author of "Practical Programming in Tcl and Tk." Welch received a BS in Aerospace Engineering at the University of Colorado, Boulder, in 1982 and an MS in Computer Science at the University of California, Berkeley, in 1986 and a PhD in Computer Science at the University of California, Berkeley, in 1990. Previously Welch was a member of research staff at Xerox PARC working on distributed systems, and later a member of the Tcl/Tk team at Sun Microsystems Laboratories. He is a member of the ACM and the IEEE Computer Society. Home Page: http://www.beedub.com/
Abstract:[Zusammenfassung]
This article explains basics concept and syntax of the Tcl language.
ArticleIllustration:[Titelbild des Artikels]
ArticleBody:[Der eigentliche Artikel]
An Introduction to Tcl Syntax
For a scripting language, Tcl has a simple syntax.
cmd arg arg arg
- A Tcl command is formed by words separated by white space. The first word is the name of the command, and the remaining words are arguments to the command.
$foo
- The dollar sign ($) substitutes the value of a variable. In this example, the variable name is
foo
.
[clock seconds]
- Square brackets execute a nested command. For example, if you want to pass the result of one command as the argument to another, you use this syntax. In this example, the nested command is clock seconds, which gives the current time in seconds.
"some stuff"
- Double quotation marks group words as a single argument to a command. Dollar signs and square brackets are interpreted inside double quotation marks.
{some stuff}
- Curly braces also group words into a single argument. In this case, however, elements within the braces are not interpreted.
\
- The backslash (\) is used to quote special characters. For example, \n generates a newline. The backslash also is used to "turn off" the special meanings of the dollar sign, quotation marks, square brackets, and curly braces.
A Little Example
Below is a Tcl command that prints the current time. It uses three Tcl commands: set
, clock
, and puts
. The set
command assigns the variable. The clock
command manipulates time values. The puts
command prints the values.
set seconds [clock seconds]
puts "The time is [clock format $seconds]"
Note that you do not use $ when assigning to a variable. Only when you want the value do you use $. The seconds
variable isn't needed in the previous example. You could print the current time with one command:
puts "The time is [clock format [clock seconds]]"
Grouping and Substitution
The Tcl syntax is used to guide the Tcl parser through three steps: argument grouping, result substitution, and command dispatch.
-
Argument grouping. Tcl needs to determine how to organize the arguments to the commands. In the simplest case, white space separates arguments. As stated earlier, the quotation marks and braces syntax is used to group multiple words into one argument. In the previous example, double quotation marks are used to group a single argument to the
puts
command.
-
Result substitution. After the arguments are grouped, Tcl performs string substitutions. Put simply, it replaces
$foo
with the value of the variable foo
, and it replaces bracketed commands with their result. That substitutions are done after grouping is crucial. This sequence ensures that unusual values do not complicate the structure of commands.
- Command dispatch. After substitution, Tcl uses the command name as a key into a dispatch table. It calls the C procedure identified in the table, and the C procedure implements the command. You also can write command procedures in Tcl. There are simple conventions about argument passing and handling errors.
Another Example
Here is another example:
set i 0
while {$i < 10} {
puts "$i squared = [expr $i*$i]"
incr i
}
Here, curly braces are used to group arguments without doing any substitutions. The Tcl parser knows nothing special about the while
command. It treats it like any other command. It is the implementation of the while
command knows that the first argument is an expression, and the second argument is more Tcl commands. The braces group two arguments: the boolean expression that controls the loop and the commands in the loop body.
We also see two math expressions: the boolean comparison and multiplication. The while command automatically evaluates its first argument as an expression. In other cases you must explicitly use the expr
command to perform math evaluation.
Command Dispatch
Lastly, Tcl calls something else to do the hard work. We've seen that Tcl uses expr
to perform math functions, puts
to handle output functions, and set
to assign variables. These Tcl commands are implemented by a C procedure that has registered itself with Tcl. The C command procedures take the string arguments from the Tcl command and return a new string as their result. It is very easy to write C command procedures. They can do everything from accessing databases to creating graphical user interfaces. Tcl, the language, doesn't really know what the commands do. It just groups arguments, substitutes results, and dispatches commands.
One Last Example
Here is the factorial procedure:
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]]]
}
}
More Reading
- Chapter 1 of Practical Programming in Tcl and Tk
- E.J. Friedman's Tcl/Tk Course
Source for this article: Scriptics