ОПИСАНИЕ
 
 
Синтаксис и семантика языка Tcl определены описанным  ниже образом.

Скрипт на Tcl представляет собой одну или более команд. Символы точки с запятой (;) и новой строки служат разделителями команд, если не находятся между символами кавычек. Закрывающие скобки служат окончанием тела команды при подстановках команд, если не находятся между символами кавычек.

Команда обрабатывается за два прохода. При первом проходе интерпретатор Tcl разбивает команду на слова и выполняет подстановки, как рассказано ниже. Эти подстановки выполняются одинаково для всех команд. Первое слово считается именем процедуры, которая исполняет команду. Когда процедура найдена, ей передаются остальные слова команды. Процедура может интерпретировать каждое из слов произвольным образом, например, как число, имя переменной, список или Tcl скрипт. Разные командные процедуры интерпретируют свои слова по-разному.

Слова команд разделяются пробельными символами (пробел, табуляция). Символ новой строки разделяет команды.

Если первый символ слова есть двойные кавычки (”), то слово должно заканчиваться также на двойные кавычки. Если в промежутке между знаками кавычек находятся точка с запятой, закрывающая скобка или пробельные символы (включая символ новой строки), то они будут поняты как обычные символы в составе слова. Подстановки команд, переменных и подстановки с обратным слешем в таком слове описаны ниже. Двойные кавычки не являются частью слова.

Если слово начинается с открывающей фигурной скобки ({), то оно должно заканчиваться на парную ей закрывающую скобку (}). Внутри фигурных скобок могут также содержаться слова в фигурных скобках. При этом каждая открывающая фигурная скобка должна иметь парную ей закрывающую фигурную скобку. Однако, если открывающая или закрывающая фигурная скобка отмечена обратным слешем, то она не учитывается при поиске парной скобки. Для символов между фигурными скобками не выполняется никаких подстановок, за исключением описанной ниже подстановки “обратный слеш — новая строка“. Также не приписывается никакого специального смысла символам точки с запятой, новой строки, закрывающей скобки и пробела. Слово будет состоять из символов между скобками, за исключением самих скобок.

Если слово содержит открывающую квадратную скобку ([), то Tcl выполняет подстановку команды. Для этого он рекурсивно вызывает интерпретатор Tcl, который обрабатывает символы, следующие за скобкой, как скрипт Tcl. Скрипт может иметь любое количество команд и должен оканчиваться закрывающей квадратной скобкой (]). Результат выполнения скрипта (т.е., результат его последней команды) подставляется в слово на место скобок и всех символов между ними. В слове может быть любое количество подстановок команд. Подстановки команд не выполняются в словах, заключенных в фигурные скобки.

Если слово содержит символ доллара ($), тогда Tcl выполняет подстановку переменной: символ доллара и последующие символы заменяются в слове на значение этой переменной. Существует три способа подстановки переменной:

$name
Здесь name — имя скалярной переменной, оно заканчивается любым символом, за исключением буквы, цифры или символа подчеркивания.
$name(index)
Здесь name есть имя массива данных, а index — имя элемента внутри этого массива. Name должен состоять только из букв, цифр и символов подчеркивания. Все виды подстановок выполняются по отношению к символам index.
${name}
Здесь name — имя скалярной переменной, оно может состоять из каких угодно символов, кроме закрывающей фигурной скобки.
В слове может быть любое количество подстановок переменных. Подстановки переменных не выполняются для слов, заключенных в фигурные скобки.

Если в слове есть символ обратного слеша, то выполняется подстановка с обратным слешем. Во всех случаях, кроме перечисленных ниже, обратный слеш пропускается, а следующий за ним символ обрабатывается как обычный символ и включается в состав слова. Таким способом в слово можно включать такие символы, как двойные кавычки, закрывающие скобки и символ доллара без непреднамеренной специальной обработки. Ниже перечислены последовательности символов, для которых подстановка с обратным слешем выполняется специальным образом, и соответствующие подставляемые значения.