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