2018-02-05 17:22:04 +03:00
|
|
|
|
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>Tcl</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<h1>Tcl</h1>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Основные правила синтаксиса команд.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2>ОПИСАНИЕ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Синтаксис и семантика языка Tcl определены описанным ниже
|
|
|
|
|
образом.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Скрипт на Tcl представляет собой одну или более команд.
|
|
|
|
|
Символы точки с запятой (<strong>;</strong>) и новой строки служат
|
|
|
|
|
разделителями команд, если не находятся между символами
|
|
|
|
|
кавычек. Закрывающие скобки служат окончанием тела команды при
|
|
|
|
|
подстановках команд, если не находятся между символами
|
|
|
|
|
кавычек.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Команда обрабатывается за два прохода. При первом проходе
|
|
|
|
|
интерпретатор Tcl разбивает команду на слова и выполняет
|
|
|
|
|
подстановки, как рассказано ниже. Эти подстановки выполняются
|
|
|
|
|
одинаково для всех команд. Первое слово считается именем
|
|
|
|
|
процедуры, которая исполняет команду. Когда процедура найдена,
|
|
|
|
|
ей передаются остальные слова команды. Процедура может
|
|
|
|
|
интерпретировать каждое из слов произвольным образом, например,
|
|
|
|
|
как число, имя переменной, список или Tcl скрипт. Разные
|
|
|
|
|
командные процедуры интерпретируют свои слова по-разному.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Слова команд разделяются пробельными символами (пробел,
|
|
|
|
|
табуляция). Символ новой строки разделяет команды.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если первый символ слова есть двойные кавычки ("), то слово
|
|
|
|
|
должно заканчиваться также на двойные кавычки. Если в промежутке
|
|
|
|
|
между знаками кавычек находятся точка с запятой, закрывающая
|
|
|
|
|
скобка или пробельные символы (включая символ новой строки), то
|
|
|
|
|
они будут поняты как обычные символы в составе
|
|
|
|
|
слова. Подстановки команд, переменных и подстановки с обратным
|
|
|
|
|
слэшем в таком слове описаны ниже. Двойные кавычки не являются
|
|
|
|
|
частью слова.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если слово начинается с открывающей фигурной скобки (<strong>{</strong>),
|
|
|
|
|
то оно должно заканчиваться на парную ей закрывающую скобку
|
|
|
|
|
(<strong>}</strong>). Внутри фигурных скобок могут также содержаться
|
|
|
|
|
слова в фигурных скобках. При этом каждая открывающая фигурная
|
|
|
|
|
скобка должна иметь парную ей закрывающую фигурную
|
|
|
|
|
скобку. Однако, если открывающая или закрывающая фигурная скобка
|
|
|
|
|
отмечена обратным слэшем, то она не учитывается при поиске
|
|
|
|
|
парной скобки. Для символов между фигурными скобками не
|
|
|
|
|
выполняется никаких подстановок, за исключением описанной ниже
|
|
|
|
|
подстановки "обратный слэш - новая строка". Также не
|
|
|
|
|
приписывается никакого специального смысла символам точки с
|
|
|
|
|
запятой, новой строки, закрывающей скобки и пробела. Слово будет
|
|
|
|
|
состоять из символов между скобками, за исключением самих
|
|
|
|
|
скобок.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если слово содержит открывающую квадратную скобку (<strong>[</strong>),
|
|
|
|
|
то Tcl выполняет подстановку команды. Для этого он рекурсивно
|
|
|
|
|
вызывает интерпретатор Tcl, который обрабатывает символы,
|
|
|
|
|
следующие за скобкой, как скрипт Tcl. Скрипт может иметь любое
|
|
|
|
|
количество команд и должен оканчиваться закрывающей квадратной
|
|
|
|
|
скобкой (<strong>]</strong>). Результат выполнения скрипта (т.е., результат его
|
|
|
|
|
последней команды) подставляется в слово на место скобок и всех
|
|
|
|
|
символов между ними. В слове может быть любое количество
|
|
|
|
|
подстановок команд. Подстановки команд не выполняются в словах,
|
|
|
|
|
заключенных в фигурные скобки.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если слово содержит символ доллара (<strong>$</strong>), тогда Tcl
|
|
|
|
|
выполняет подстановку переменной: символ доллара и последующие
|
|
|
|
|
символы заменяются в слове на значение этой переменной.
|
|
|
|
|
Существует три способа подстановки переменной:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Здесь <em>name</em> - имя скалярной переменной, оно заканчивается
|
|
|
|
|
любым символом, за исключением буквы, цифры или символа
|
|
|
|
|
подчеркивания.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
(index)
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Здесь <em>name</em> есть имя массива данных, а <em>index</em> - имя
|
|
|
|
|
элемента внутри этого массива. <em>name</em> должен состоять
|
|
|
|
|
только из букв, цифр и символов подчеркивания. Все виды
|
|
|
|
|
подстановок выполняются по отношению к символам
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<em>index</em>.</p>
|
|
|
|
|
<pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Здесь <em>name</em> - имя скалярной переменной, оно может
|
|
|
|
|
состоять из каких угодно символов, кроме закрывающей фигурной
|
|
|
|
|
скобки. В слове может быть любое количество подстановок
|
|
|
|
|
переменных. Подстановки переменных не выполняются для слов,
|
|
|
|
|
заключенных в фигурные скобки.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если в слове есть символ обратного слэша, то выполняется
|
|
|
|
|
подстановка с обратным слэшем. Во всех случаях, кроме
|
|
|
|
|
перечисленных ниже, обратный слэш пропускается, а следующий за
|
|
|
|
|
ним символ обрабатывается как обычный символ и включается в
|
|
|
|
|
состав слова. Таким способом в слово можно включать такие
|
|
|
|
|
символы, как двойные кавычки, закрывающие скобки и символ
|
|
|
|
|
доллара без непреднамеренной специальной обработки. Ниже
|
|
|
|
|
перечислены последовательности символов, для которых подстановка
|
|
|
|
|
с обратным слэшем выполняется специальным образом, и
|
|
|
|
|
соответствующие подставляемые значения.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<table>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td></td>
|
|
|
|
|
<td>Звуковой сигнал (гудок) (0х7).</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td></td>
|
|
|
|
|
<td>Сдвиг на одну позицию влево (0х8).</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td></td>
|
|
|
|
|
<td>Прогон листа (0xc).</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>
|
|
|
|
|
</td>
|
|
|
|
|
<td>Новая строка, newline (0ха).</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>
</td>
|
|
|
|
|
<td>Возврат каретки (0хd).</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td> </td>
|
|
|
|
|
<td>Табуляция (0х9).</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td></td>
|
|
|
|
|
<td>Вертикальная табуляция (0xb).</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>\<newline><em>пробел</em></td>
|
|
|
|
|
<td>Обратный слэш, символ новой строки и все пробелы и
|
|
|
|
|
табуляции после этого символа заменяются на одиночный
|
|
|
|
|
пробел. Данная последовательность уникальна в том смысле,
|
|
|
|
|
что она замещается в отдельном суб-проходе перед тем, как
|
|
|
|
|
начинается непосредственно анализ команды. Поэтому эта
|
|
|
|
|
последовательность будет замещена, даже если она стоит
|
|
|
|
|
между фигурными скобками, и результирующий пробел будет
|
|
|
|
|
интерпретироваться как разделитель слов, если только он
|
|
|
|
|
не будет стоять между фигурными скобками или
|
|
|
|
|
кавычками.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>\</td>
|
|
|
|
|
<td>Обратный слэш (\).</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>\ooo</td>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Цифры <em>ooo</em> (одна, две или все три) дают
|
|
|
|
|
восьмеричное значение символа.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td>\xhh</td>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<td>Шестнадцатеричное число hh дает шестнадцатеричное
|
|
|
|
|
значение символа. Может присутствовать любое количество
|
|
|
|
|
цифр.</td>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Подстановки с обратным слэшем не выполняются в словах,
|
|
|
|
|
заключенных в фигурные скобки, кроме подстановки "обратный слэш
|
|
|
|
|
- новая строка".</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если символ "#" будет стоять в том месте, где Tcl
|
|
|
|
|
предполагает первый символ первого слова команды, то этот символ
|
|
|
|
|
и все последующие символы до следующего символа новой строки
|
|
|
|
|
включительно истолковываются как комментарии и
|
|
|
|
|
игнорируются. Символ комментария действителен только тогда,
|
|
|
|
|
когда он стоит в начале команды.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>При воссоздании слов команды каждый символ обрабатывается
|
|
|
|
|
интерпретатором Tcl только один раз. Например, если выполнялась
|
|
|
|
|
подстановка переменной, то в значении переменной никаких
|
|
|
|
|
подстановок не производится; значение вставляется в слово без
|
|
|
|
|
изменений. Если выполнялась подстановка команды, то вставленная
|
|
|
|
|
команда обрабатывается целиком посредством рекурсивного вызова
|
|
|
|
|
интерпретатора Tcl; не делается никаких подстановок перед
|
|
|
|
|
рекурсивным вызовом и не делается никаких дополнительных
|
|
|
|
|
подстановок в результат исполнения вставленного скрипта.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Подстановки не воздействуют на границы слов в команде.
|
|
|
|
|
Например, при подстановке переменной все значение переменной
|
|
|
|
|
становится частью одного слова, даже если это значение содержит
|
|
|
|
|
пробелы.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</body>
|
|
|
|
|
</html>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
|