Files
krkr2doc/docs/tjs2doc/contents/token.html
2016-09-08 17:50:19 +09:00

247 lines
17 KiB
HTML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<!-- generated by to_html.pl from token.xml -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>トークン</title>
<meta name="author" content="W.Dee" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<link href="browser.css" type="text/css" rel="stylesheet" title="吉里吉里関連リファレンス用標準スタイル" />
<link href="mailto:[email protected]" rev="Made" />
<link href="index.html" target="_top" rel="Start" title="トップページ" />
</head>
<body>
<h1><a id="id357" name="id357">トークン</a>
</h1><div class="para"><div>
 スクリプトは、解釈中、すべてトークンと呼ばれる単位に分解されて処理されます。<br />
 トークンと次のトークンの境界は、トークンの種類によって異なります。</div></div>
<h1><a id="id358" name="id358">裸の単語</a>
</h1><div class="para"><div>
 「裸の単語」とは、<code class="inlinecode">&quot;&quot;</code><code class="inlinecode">''</code> クオート(引用)されていない、スクリプト中に直接書かれる特定の文字の並びのことです。<br />
 「裸の単語」は以下の規則を持っています。<br />
 <br />
<ul><li>アルファベットの小文字・大文字、'<code class="inlinecode">_</code>'(アンダーバー)、数字、いわゆる全角文字で構成される。ただし数字は先頭にくることができない。</li><li>これらの連続が終わるまでが、一つの「裸の単語」として扱われる</li></ul><br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;ampan&nbsp;&nbsp;<span class="comment">//&nbsp;OK</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;123a&nbsp;<span class="comment">//&nbsp;数字が先頭に来ているので&nbsp;NG</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;_asdf&nbsp;<span class="comment">//&nbsp;アンダーバーは先頭にくることができるので&nbsp;OK</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;continue&nbsp;<span class="comment">//&nbsp;これは予約語&nbsp;OK</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;全角文字&nbsp;<span class="comment">//&nbsp;いわゆる全角文字は「裸の単語」として&nbsp;OK</span><br />
</code>
<br />
<br />
 「裸の単語」は、さらに予約語と識別子に分類されます。<br />
</div></div>
<h1><a id="id359" name="id359">予約語</a>
</h1><div class="para"><div>
 予約語は以下のもので、識別子ではありません。「裸の単語」のうち、予約語ではないものはすべて識別子です。<br />
<br />
<code class="inlinecode"> break continue const catch class case<br />
debugger default delete do extends export<br />
enum else function finally false for<br />
global getter goto incontextof Infinity<br />
invalidate instanceof isvalid import int in<br />
if NaN null new octet protected property<br />
private public return real synchronized switch<br />
static setter string super typeof throw<br />
this true try void var while with</code><br />
<br />
 これらの予約語は、スクリプトの文法を構成する重要な用途として特殊な意味をそれぞれ持っています。このうちのいくつかは、演算子として使用されるものです。<br />
 ただし、現バージョンではこれらのすべての予約語が使用されているわけではありません。<br />
</div></div>
<h1><a id="id360" name="id360">識別子</a>
</h1><div class="para"><div>
 「識別子」は、「裸の単語」のうち、予約語でないものすべてです。これらは、記述者が自由に命名することのできる変数や関数、クラス名などに用いられます。<br />
 識別子は予約語を含んでいても、予約語そのものでなければ、予約語ではなく識別子として認識されます。<br />
</div></div>
<h1><a id="id361" name="id361">記号</a>
</h1><div class="para"><div>
 記号類もトークンとして分解されます。記号類には以下のものがあります。<br />
<br />
<code class="inlinecode">&gt;&gt;&gt;= &gt;&gt;&gt; &gt;&gt;= &gt;&gt; &gt;= &gt; &lt;&lt;= &lt;=<br />
&lt;-&gt; &lt;&lt; &lt; === == =&gt; = !== != !<br />
&amp;&amp;= &amp;&amp; &amp;= &amp; ||=<br />
|| |= | ... . ++ += + -= -- - *=<br />
* /= / \= \ %= % ^= ^ [ ] ( ) ~<br />
? : , ; { } # $</code><br />
<br />
 これらは、最長一致でトークンとして切り出されます。たとえば、 <code class="inlinecode">++</code> は、 <code class="inlinecode">+</code><code class="inlinecode">+</code> ではなく、 <code class="inlinecode">++</code> という一つの記号として分解されます。これらを別々の <code class="inlinecode">+</code><code class="inlinecode">+</code> として記述したいばあいは、<code class="inlinecode">+</code><code class="inlinecode">+</code> の間にスペースなどを挟む必要があります。<br />
<br />
 記号類は、それぞれ文法を構成する要素として重要な意味を持っています。記号のうち、いくつかは演算子として使用されるものです。<br />
</div></div>
<h1><a id="id362" name="id362">数値即値</a>
</h1><div class="para"><div>
 数値即値は、数字、あるいは <code class="inlinecode">.</code> (小数点)で始まるものです。<code class="inlinecode">TJS2</code> は、以下の形式を認識します。<br />
 普通に数値を書けばそのまま10進の数値即値になります。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;0<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.1<br />
&nbsp;&nbsp;&nbsp;&nbsp;342.3<br />
&nbsp;&nbsp;&nbsp;&nbsp;1<br />
</code>
<br />
<br />
 また、10進については <code class="inlinecode">e</code> または <code class="inlinecode">E</code> を使い、10を底とする <a id="id363" name="id363" class="targanchor"><dfn>指数指定</dfn></a>をすることもできます。<code class="inlinecode">e</code> でも <code class="inlinecode">E</code> でも意味は同じです。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;1e-3&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;1×10<sup>-3</sup></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;3.4e10&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;3.4×10<sup>10</sup></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;9.3E-2&nbsp;&nbsp;<span class="comment">//&nbsp;9.3×10<sup>-2</sup></span><br />
</code>
<br />
<br />
 先頭に <code class="inlinecode">0x</code> または <code class="inlinecode">0X</code> をつけると <a id="id364" name="id364" class="targanchor"><dfn>16進数</dfn></a>での指定となります。<code class="inlinecode">0x</code> でも <code class="inlinecode">0X</code> でも意味は同じです。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;0x1234<br />
&nbsp;&nbsp;&nbsp;&nbsp;0Xff<br />
&nbsp;&nbsp;&nbsp;&nbsp;0x3f33<br />
</code>
<br />
<br />
 先頭に <code class="inlinecode">0b</code> または <code class="inlinecode">0B</code> をつけると <a id="id365" name="id365" class="targanchor"><dfn>2進数</dfn></a>での指定となります。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;0b0100<br />
&nbsp;&nbsp;&nbsp;&nbsp;0B0010100010100001<br />
</code>
<br />
<br />
 先頭に <code class="inlinecode">0</code> がつくと <a id="id366" name="id366" class="targanchor"><dfn>8進数</dfn></a>として扱われます。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;01234<br />
&nbsp;&nbsp;&nbsp;&nbsp;033<br />
</code>
<br />
<br />
 16進、8進、2進についても、小数点形式や p による指数指定が可能です。p は 2 を底とする指数指定です。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;0b1.1&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;1&nbsp;+&nbsp;1/2&nbsp;&nbsp;1.5&nbsp;を表す</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;0x2.f&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;2&nbsp;+&nbsp;15/16&nbsp;&nbsp;2.9375&nbsp;を表す</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;0x1p8&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;1&nbsp;×&nbsp;2<sup>8</sup>&nbsp;&nbsp;256.0&nbsp;を表す</span><br />
</code>
<br />
<br />
<br />
 数値即値は、それが数値即値の構成文字である限り一つの数値即値としてあつかわれます。<br />
</div></div>
<h1><a id="id367" name="id367">文字列即値</a>
</h1><div class="para"><div>
 文字列即値(文字列リテラル)は、<code class="inlinecode">&quot;&quot;</code> (ダブルクオーテーション) または <code class="inlinecode">''</code>(シングルクオーテーション)で囲まれるものです。ダブルクオーテーションをつかってもシングルクオーテーションを使ってもかまいません。<br />
 ただし、<code class="inlinecode">&quot;&quot;</code> (ダブルクオーテーション) 中では '(シングルクオーテーション) を、<code class="inlinecode">''</code>(シングルクオーテーション)中では <code class="inlinecode">&quot;</code> (ダブルクオーテーション) を、<code class="inlinecode">\</code> でエスケープする必要が無くなります。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;this&nbsp;is&nbsp;a&nbsp;string.&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;'this&nbsp;is&nbsp;also&nbsp;a&nbsp;string.'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;Can't&nbsp;use&nbsp;without&nbsp;a&nbsp;quotation.&quot;<br />
</code>
<br />
<br />
 文字列中で <code class="inlinecode"><a id="id368" name="id368" class="targanchor"><dfn>\</dfn></a></code> (円記号) は特別な意味を持ちます。 \ の後に続く文字で意味が変わります。\ に続けて特殊な指定をすることを<a id="id369" name="id369" class="targanchor"><dfn>エスケープ</dfn></a>するといいます。<br />
<br />
<br />
<code class="bq">\\&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;\&nbsp;マーク自体<br />
\'&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;'&nbsp;(シングルクオーテーション)<br />
\&quot;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&quot;&nbsp;(ダブルクオーテーション)<br />
\a&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;BEL&nbsp;(可聴ベル)<br />
\b&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;BS&nbsp;(後退)<br />
\f&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;FF&nbsp;(フォームフィード)<br />
\n&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;LF&nbsp;(改行)<br />
\r&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;CR&nbsp;(復帰)<br />
<br />
\t&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;HT&nbsp;(水平タブ)<br />
\v&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;VT&nbsp;(垂直タブ)<br />
\xH&nbsp;&nbsp;&nbsp;:&nbsp;H=16&nbsp;進数&nbsp;(&nbsp;H&nbsp;が文字コードを表します&nbsp;)<br />
\XH&nbsp;&nbsp;&nbsp;:&nbsp;上に同じ<br />
</code>
<br />
<br />
 <code class="inlinecode">\xH</code> の形式で、H の部分には 16 進数を指定します。すると、その 16 進数は文字コードとして扱われ、その一文字に置き換わります。<br />
<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;'Can\'t&nbsp;help'&nbsp;&nbsp;(&nbsp;\'&nbsp;を用いている&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;\x1234&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;ワイド文字としての&nbsp;0x1234&nbsp;という文字コードの文字&nbsp;)<br />
</code>
<br />
<br />
また、<code class="inlinecode">\xH</code> の形式では、 \x の次に 16 進数を構成する文字 ( 0~9 、A~F、a~f ) が続く限り、それは H の部分であるとみなされます。ただし、ワイド文字のサイズが 16bit の環境では最大 4 桁、32bit のマシンでは最大 8 桁までが認識されます ( Windowsの場合は 16bit、Linux や Solaris では 32bit です )。<br />
<code class="inlinecode">&quot;<em>\x22A</em>n Apple&quot;</code> とかくと、先頭は \x22A であるとみなされてしまいます。これを避けるには、<code class="inlinecode">&quot;\x22&quot; &quot;An Apple&quot;</code> として、文字列をわけ、続けて書いてください。TJS では、このように文字列即値が連続する場合、ひとつの文字列だとみなします。<br />
<br />
 文字列については <a target="main" class="jump" href="string.html">文字列に対する操作</a> も参照してください。<br />
</div></div>
<h1><a id="id370" name="id370">@ つき文字列即値</a>
</h1><div class="para"><div>
 文字列即値の前に @ を置くと、その文字列即値中の &amp; から ; までの間、または ${ から } までの間を式とみなし、それを評価した結果をそこに展開するようになります (式を &amp; と ; の間や ${ と } に書けば、その結果がそこに埋め込まれます)。<br />
 &amp; や $ を展開したくない場合は、&amp; や $ の前に \ を置くことで &amp; や $ を展開しないようにすることができます。<br />
<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;@&quot;1+2=&amp;1+2;&quot;&nbsp;&nbsp;(&nbsp;&quot;1+2=3&quot;&nbsp;という文字列になる&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@&quot;変数&nbsp;f&nbsp;の内容は&nbsp;&amp;f;&nbsp;です&quot;&nbsp;&nbsp;(&nbsp;変数&nbsp;f&nbsp;の内容を&nbsp;&amp;f;&nbsp;の場所に展開する&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@&quot;関数&nbsp;func&nbsp;を呼び出した結果は&nbsp;&amp;func();&nbsp;です&quot;&nbsp;&nbsp;(&nbsp;式として有効なものならば&nbsp;&amp;&nbsp;&nbsp;;&nbsp;の間に記述可&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@&quot;関数&nbsp;func&nbsp;を呼び出した結果は&nbsp;${func()}&nbsp;です&quot;&nbsp;&nbsp;(&nbsp;上と同じ&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;@&quot;true&nbsp;\&amp;\&amp;&nbsp;false&nbsp;&nbsp;&amp;true&nbsp;&amp;&amp;&nbsp;false;&quot;&nbsp;&nbsp;(&nbsp;&amp;&nbsp;の前に&nbsp;\&nbsp;を書けば&nbsp;&amp;&nbsp;は展開されない&nbsp;)<br />
</code>
<br />
<br />
 ここに記述する式は、この文字列の書かれている場所からアクセス可能な範囲にある変数など (ローカル変数を含む) にアクセスできます。<br />
</div></div>
<h1><a id="id371" name="id371">オクテット列即値</a>
</h1><div class="para"><div>
 オクテット列即値は、<code class="inlinecode">&lt;%</code><code class="inlinecode">%&gt;</code> で囲まれるもので、中にオクテットデータ ( バイナリデータ ) を書くことができます。<br />
 データは二桁の16進数をスペースなどで区切り、複数指定します。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;%&nbsp;00&nbsp;01&nbsp;02&nbsp;03&nbsp;%&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;%&nbsp;ff&nbsp;ff&nbsp;ff&nbsp;00&nbsp;04&nbsp;0f&nbsp;ff&nbsp;30&nbsp;%&gt;<br />
</code>
<br />
<br />
 オクテット列については <a target="main" class="jump" href="octet.html">オクテット列に対する操作</a> も参照してください。<br />
</div></div>
<h1><a id="id372" name="id372">正規表現パターン</a>
</h1><div class="para"><div>
 正規表現パターンは、<code class="inlinecode">/</code><code class="inlinecode">/</code> で囲まれるもので、なかに正規表現パターンを書くことができます。<br />
 正規表現パターンの後に続けてフラグ文字を書くことができ、g は グローバルサーチフラグ ( 見つかったものをすべてにマッチ;このフラグがないと最初のものだけにマッチ )、i は英字大文字小文字を区別しないフラグ、l はローカライズされたコレーションを行うようにするフラグです。<br />
 このようにして書かれた正規表現パターンは、RegExp クラスのオブジェクトとして扱われます。<br />
<br />
<code class="bq"><span class="weak">例:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;/[0-9]-[0-9]-[0-9]/<br />
&nbsp;&nbsp;&nbsp;&nbsp;/^;\s*(.*?)\s*=(.*)$/<br />
&nbsp;&nbsp;&nbsp;&nbsp;/start(.*?)end/gi<br />
</code>
<br />
<br />
 正規表現パターンについては <a target="main" class="jump" href="regexp.html">RegExp クラス</a> も参照してください。<br />
</div></div>
<script type="text/javascript" charset="UTF-8" src="documentid.js" ></script>
<script type="text/javascript" charset="UTF-8" src="postcontent.js" ></script>
</body>
</html>