Tcl
|
|
次の規則があります。
- [1]
- Tclスクリプトは1つ以上のコマンドを含む文字列です。
下述のようにクォートされていなければ、セミコロンと改行はコマンド区切り記号です。右大括弧
はクォートされていなければ(以下を参照)
コマンド置き換えの間のコマンドを終了する記号です。
- [2]
- コマンドは2つのステップで評価されます。最初に、Tclインタプリタはコマンドをwordに分割し、下述のように置き換えを行います。
これらの置き換えはすべてのコマンドで同じ方法で行われます。最初の単語は、コマンドを実行するコマンドプロシージャを決定するために使われる部分です。
そしてすべての単語がコマンドプロシージャに渡されます。
コマンドプロシージャはそれぞれの単語を好きな方法で自由に解釈できます。例えば、整数、変数名、
リスト、Tclスクリプト等。異なるコマンドはそれらの単語を異なる方法で解釈します。
- [3]
- コマンドの単語は(コマンドを分離する改行を除く)空白で分離されます。
- [4]
- 単語の最初の文字が2重引用符(""'')なら、その単語は次の2重引用符文字で終了します。セミコロン、右大括弧
、 あるいは(改行を含む)空白文字が引用符の間に現れても、それらは普通の文字として扱われ、単語に含まれてしまいます。コマンド置き換え、
変数置き換え、そしてバックスラッシュ置き換えは下述のように、引用符の間の文字で行われます。2重引用符は単語の一部としては保有されません。
- [5]
- 単語の最初の文字が左中括弧("{'')なら、単語は対応する右中括弧("}'')で終了します。中括弧は単語の内側でネストします。各後継の左中括弧には後継の右中括弧がなければなりません
(しかし、単語内の左中括弧や右中括弧がバックスラッシュで引用されていると対応する右中括弧の計算に入られません)。
中括弧の間の文字では、以下で記述されるバックスラッシュ-改行置き換えを除いて置き換えは行われません。
セミコロン、改行、右大括弧あるいは空白文字はいかなる特別の扱いも受けません。
単語はそれ自身は含まれない外側の中括弧の間の文字から構成されます。
- [6]
- 単語が左大括弧("['')を含んでいると、Tclはコマンド置き換えを行います。
これを行うためにTclは、右大括弧に続く文字をTclスクリプトとして処理するためにインタプリタを再帰的に呼び出します。
スクリプトはいくつのコマンドを含んでいてもよく、右大括弧("]'')で終了
しなければなりません。 スクリプトの結果(即ち、その最後のコマンドの結果)は、単語の中の大括弧
とその間の文字の場所と置き換えられます。
1つの単語のなかにはいかなる数のコマンド置き換えがあってもかまいません。
コマンド置き換えは中括弧に納められている単語では行われません。
- [7]
- 単語がドルマーク("$'')を含んでいると、Tclは変数置き換えを行います。
単語の中のドルマークとそれに続く文字は変数の値と置き換えられます。
変数置き換えは次の形式のいずれかをとります。
- $name
- name はスカラ変数の名前です。
その名前は英字、数字、下線、またはネームスペース区切り記号等の1つ以上の文字列です。
- $name(index)
- name は配列変数の名前で、indexはその配列内の要素の名前を与えます。
name は英字、数字、下線またはネームスペース区切り記号だけを含んでいなければなりません。
index内の文字ではコマンド置き換え、変数置き換え、そしてバックスラッシュ置き換えが行われます。
- ${name}
- name はスカラ変数の名前です。 それは右中括弧
を除くいかなる文字も含むことができます。
1つの単語でいくつの変数置き換えがあってもよい。変数置き換えは中括弧で括られた単語では行われません。
- [8]
- バックスラッシュ("\'')が単語内に現れると、バックスラッシュ置き換えが発生します。
以下で言及されるものを除く、バックスラッシュは取り除かれ、続く文字は普通の文字として扱われ、単語に含まれます。これは2重引用符、右大括弧
、そしてドルマークのような文字を特別な処理を引き起こすことなく単語に含むことを可能にします。次の表は特別
に扱われるバックスラッシュ列を、各列が置き換えられた結果値と共に列挙します。
- \ a
- 警告音 (bell) (0x7)。
- \ b
- バックスペース ( 0x8 ) 。
- \ f
- 改頁 ( 0xc ) 。
- \ n
- 改行 ( 0xa ) 。
- \ r
- 復帰 ( 0xd ) 。
- \ t
- タブ ( 0x9 ) 。
- \ v
- 垂直タブ ( 0xb ) 。
- \〈newline〉whiteSpace
- 単一のスペースがバックスラッシュ、改行、そして改行の後のすべてのスペースとタブを置き換えします。
このバックスラッシュ列は
コマンドが実際に解析される前に個別のプレパスで置き換えられる点では特別
です。
これは中括弧の中に現れたときでさえ、置き換えが起こることを意味します。
そして中括弧や引用符の中になければ、置き換えられたスペースは単語の区切り記号となります。
-
- \\
- バックスラッシュ ( \ ) 。
- \ ooo
- 数字ooo(1つから3つまでの)が保存されたユニコード文字の8ビットの8進数での値を与えます。
ユニコード文字の上位ビットは0です。
- \ xhh
- 16進数の数字hhが保存されたユニコード文字の8ビットの16進数での値を与えます。
16進数字の数はいくつでもかまいませんが、 最後の2つを除いてすべて無視されます
(その結果が常に1バイトです)。ユニコード文字の上位ビットは0です。
- \ uhhhh
- 16進数字hhhh ( 1つから4つまで)
が保存されたユニコード文字の16ビットの16進数での値を与えます。
バックスラッシュ置き換えは以上で言及されたバックスラッシュ-改行シーケンスを除いて、中括弧
で括られた単語では行われません。
- [9]
- シャープ記号("#'')がTclがコマンドの最初の単語の最初の文字と期待する場所に現れると、シャープ記号と続く文字は次の改行までコメントとして扱われて、無視されます。
コメント文字はコマンドの始まりに現れたときにだけ意味を持っています。
- [ 10 ]
- 各文字は正確に1度だけTclインタプリタによって、コマンドを作成する単語の一部として処理されます。
例えば、変数置き換えが起こるとその変数の値ではそれ以上の置き換えは行われません。
その値はそのまま単語に挿入されます。
コマンド置き換えが起こるとネストされたコマンド全体がTclインタプリタの再帰的呼び出しにより処理されます。再帰呼び出しが作成される前に置き換えは行われず、ネストされたスクリプトの結果
では置き換えも行われません。
- [ 11 ]
- 置き換えはコマンドの単語の境界には影響を与えません。
例えば、変数置き換えの間に変数の値がたとえスペースを含んでいたとしても変数の値全体が単一の単語の一部になります。
Copyright © 1993 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.
Copyright © 1995-1997 Roger E. Critchlow Jr.
|
|