NAME
Tcl - Tool Command Language
SYNOPSYS
Краткое изложение синтаксиса языка Tcl.
DESCRIPTION
Следующие правила определяют синтаксис и семантику языка Tcl. [1] Команды. Скрипт на Tcl представляет собой строку, содержащую одну или более команд. Символы точки с запятой и новой строки являются разделителями команд, если не находятся в кавычках как описано ниже. Закрывающие квадратные скобки являются окончанием команды в течении подстановки команд(см. ниже), если не находятся в кавычках. [2] Вычисление. Команда обрабатывается в два шага. На первом шаге интерпретатор Tcl разбивает команду на слова и выполняет подстановки, как рассказывается ниже. Эти подстановки выполняются одинаковым образом для всех команд. Первое слово используется для определения командной процедуры, выполняющей команду, после этого все слова команды передаются командной процедуре. Командная процедура свободна в интерпретации каждого слова таким образом, каким она захочет: как число, имя переменной, список или Tcl скрипт. Разные команды интерпретируют свои слова по-разному. [3] Слова. Слова команды разделяются пробельными символами(исключая символ новой строки, который является разделителем команд). [4] Двойные кавычки. Если первым символом слова является двойная кавычка (`"`), тогда концом слова считается также двойная кавычка. Если точка с запятой, закрывающая скобка или пробельный символ(включая символ новой строки) появляется между двойными кавычками, тогда они рассматриваются как обычные символы и включаются в слово. Подстановки команд, переменных и последовательностей с обратным слэшем выполняются на символах в двойных кавычках как описано ниже. Сами кавычки не используются как часть слова. [5] Фигурные скобки. Если первым символом слова является открывающая фигурная скобка(`{`), то концом слова считается закрывающая фигурная скобка(`}`). Фигурные скобки могут быть вложены в слово, при этом для каждой открывающей фигурной скобки должна быть соответствующая закрывающая (однако, если открывающая или закрывающая фигурная скобка предварена обратным слэшем, то она не учитывается при поиске парной скобки). Подстановки не производятся для символов внутри фигурных скобок, исключая подстановку ````обратный слэш-новая строка'', описанную ниже, ни точка с запятой, ни символ новой строки, ни закрывающая квадратная скобка или пробельный символ специально не интерпретируются. Слово будет состоять только из символов, находящихся между фигурными скобками, исключая сами скобки. [6] Командная подстановка Если слово содержит открывающую квадратную скобку (`[[`), тогда Tcl выполняет подстановку команды. Для этого он рекурсивно вызывает Tcl интерпретатор, для обработки символов, следующих за открывающей фигурной скобкой, как Tcl скрипт. Скрипт может содержать любое количество команд и должен заканчиваться закрывающей квадратной скобкой(`]]`). Результат скрипта(т.е. результат последней команды) подставляется в слово на место фигурных скобок и всех символов между ними. В одном слове может быть любое количество командных подстановок. Командная подстановка не выполняется в словах, заключённых в фигурные скобки. [7] Подстановка переменной Если слово содержит символ доллара (`$`), тогда Tcl выполнит подстановку переменной: символ доллара и следующие за ним символы заменяются в слове на значение переменной. Подстановка переменной может принимать одну из следующих форм: $name Name - имя скалярной переменной; name - это последовательность одного или более символов, являющихся буквой, цифрой, символом подчёркивания или разделителем пространства имён(два или более двоеточий). $name(index) Name - имя переменной массива, а index - имя элемента внутри массива. Name может содержать только буквы, цифры, символы подчёркивания и разделители пространства имён, а также может быть пустой строкой. Командные подстановки, подстановки переменный и подстановки с обратным слэшем выполняются для символов index. ${name} Name - имя скалярной переменной. Оно может содержать любые символы, исключая закрывающую фигурную скобку. В одном слове может быть любое количество подстановок переменных. Подстановки переменных не выполняются для слов, заключённых в фигурные скобки. [8] Подстановка с обратным слэшем Если обратный слэш (`\`) появляется в слове, то выполняется подстановка с обратным слэшем. Во всех случаях, кроме ниже перечисленных, обратных слэш отбрасывается и следующий символ обрабатывается как обычный символ и включается в слово. Это позволяет таким символам, как двойные кавычки, закрывающие квадратные скобки и символы доллара, быть включёнными в слово без специальной обработки. В нижеследующей таблице показаны последовательности с обратным слэшем, которые обрабатываются специальным образом, вместе с подставляемыми значениями. \a Звуковой сигнал(гудок) (0x7). \b Сдвиг на одну позицию влево (0x8). \f Прогон страницы (0xc). \n Новая строка (0xa). \r Возврат каретки (0xd). \t Табуляция (0x9). \v Вертикальная табуляция (0xb). \<newline>пробел Один пробельный символ заменяет обратный слэш, символ новой строки и все пробелы и табуляторы после символа новой строки. Эта последовательность уникальна в том, что она замещается в отдельном препроходе, перед тем, как команда анализируется. Это значит, что последовательность будет замещена даже в фигурных скобках, и результирующий пробел будет рассматриваться как разделитель слов если только он не будет находится между фигурными скобками или двойными кавычками. \\ Обратный слэш (`\`) \ooo Цифры ooo (одна, две или три) дают восьмибитовое восьмеричное значение символа из набора Unicode, которое и будет вставлено. Верхние биты символа из набора Unicode будут равны 0. \xhh Шестнадцатеричные цифры hh дают восьмибитовое шестнадцатеричное значение для символа Unicode, которое и будет вставлено. Любое количество шестнадцатеричных цифр может присутствовать, однако все кроме двух последних будут игнорированны (результат всегда однобайтовый). Верхние биты символа из набора Unicode будут равны 0. \uhhhh Шестнадцатеричные цифры hhhh (одна, две, три или четыре) дают шестнадцатибитовое значение для символа Unicode, которое и будет вставлено. Подстановки с обратным слэшем не выполняются со словами, заключёнными в фигурные скобки, исключение составляет подстановка ````обратный слэш-новая строка'' как рассказано выше. [9] Комментарии Если символ хэша (`#`) появляется в месте, где Tcl ожидает первый символ первого слова команды, тогда хэш символ и символы, следующие за ним до конца строки рассматриваются как комментарии и игнорируются. Символ комментария имеет значение только если он появляется в начале команды. [10]Порядок подстановок Каждый символ обрабатывается только один раз Tcl интерпретатором как часть создания слова команды. Например, если происходит подстановка переменной, то никаких других подстановок над значением переменной не производится, значение вставляется в слово без изменений. Если происходит командная подстановка, то вложенные команды обрабатываются полностью с помощью рекурсивного вызова интерпретатора Tcl, никаких подстановок перед рекурсивным вызовом не производится и не производится никаких дополнительных подстановок над результатом выполнения скрипта. Подстановки производятся слева направо, выполнение следующей подстановки производится только после завершения предыдущей. Таким образом, последовательность команд set y [set x 0][incr x][incr x] всегда будет присваивать переменной y значение 012. [11] Подстановки и границы слов Подстановки не затрагивают границы слов команды. Например, в течении подстановки переменной всё значение переменной становится частью одного слова, даже если значение переменной содержит пробелы.
See also: TclTk russian manual pages