17.2 字句集合
SML#の字句は,以下の種類がある.
- 予約語
-
以下はSML#の予約語であり,識別子には使用できない.
abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec set sharing sig signature struct structure then type val where while with withtype ( ) [ ] { } , : :> ; ... _ = => -> #
これら文字列は,以下の識別子の項で定義される言語クラス alphaIdには含まれない.
- SQL予約語
-
以下の各語は,SQL構文の中では予約語であり, 識別名として使用できない.
asc all begin by commit cross default delete desc distinct fetch first from group inner insert into is join limit natural next not null offset only on or order rollback row rows select set update values where
- 拡張予約語
-
_で始まる以下の名前は,SML#の拡張機能を実現するた めに導入された予約語である. これら拡張予約語は,Standard MLでは字句と認識されない語であり, これらを追加してもStandard MLとの後方互換性が保たれている.
__attribute__ _builtin _foreach _import _interface _join _dynamic _dynamiccase _polyrec _require _sizeof _sql _sqlserver _typeof _use
- 識別子
-
識別子は,プログラム中で使用される種々の名前である. SML#では,以下の7種類の識別子がある. これら7種類はその使用文脈に応じて区別されるので,同一の名前を別 の用途に使用してよい.
名 用途 vid 変数,データコンストラクタ lab レコードのラベル strid ストラクチャ名 sigid シグネチャ名 funid ファンクタ名 tycon 型構成子名 tyvar 型変数 これら識別子の構造は以下の通りである.
vid ::= alphaId symbolId lab ::= alphaId string decimal decimal _ alphaId (注1) strid ::= alphaId sigid ::= alphaId funid ::= alphaId tyvar ::= ’ alphaId ’’alphaId tycon ::= alphaId symbolId 注
-
1.
レコードラベルは, 文字列ラベル(alphaIdまたはstring), 整数ラベル(decimal), 順序付き文字列ラベル(decimal _ alphaId) の3種類がある. SML#では,レコードは,ラベルの順序に従ってソートされ,メ モリーが割り当てられる. 文字列ラベルの順序は,文字列の順序String.compareである. 数字ラベルの順序は,数字列を自然数と解釈した時の自然数の順序であ る. 順序付き文字列ラベルは,数字ラベルと文字列ラベルが
_
で連結 されたものであり,その順序は,数字ラベルと文字列ラベルの順序の辞書式順序 である.
各文字クラスの定義は以下の通り.
alpha ::= [A-Za-z \
127-\
255]symbol ::= ! % & $ + / : < = > ? @ ‘ | # - ^ \ alphaId ::= alpha (alpha [0-9] ’ _ )* (注1) decimal ::= [1-9] [0-9]* symbolId ::= symbol* (注2) 注
-
1.
字句クラスalphaIdには予約語は含まれない. さらに,_sqlで始まるSQL式内では, alphaIdにはSQL予約語は含まれない.
-
2.
symbolIdには予約語は含まれない. したがって,==>はsymbolIdの要素であるが, =>はsymbolIdの要素ではない.
-
1.
- long識別子
-
変数やデータ構成子名vidとストラクチャ名strid に対しては,ストラクチャ名のリストがプレフィックスされたlong識別子が定義 される.
longVid ::= (strid .)* vid longTycon ::= (strid .)* tycon longStrid ::= (strid .)* strid - 定数リテラル scon
-
定数リテラルの定義は以下の通りである.
scon ::= int word real string char 定数リテラル int ::= ~
[0-9]10進整数 ~
0x
[0-9a-fA-F]16進整数 word ::= 0w
[0-9]10進符合なし整数 0wx
[0-9a-fA-F]16進符合なし整数 real ::= ~
[0-9] . [0-9] [Ee]~
[0-9]+不動小数点数 ~
[0-9] . [0-9]+~
[0-9] [Ee]~
[0-9]+char ::= #"
(printable escape)"
文字 string ::= "
(printable escape)"
文字列 printable ::= \と"を除いた文字 escape ::= \a
警告文字 (ASCII 7) \b
バックスペース (ASCII 8) \t
タブ (ASCII 9) \n
改行文字 (ASCII 10) \v
垂直タブ (ASCII 11) \f
ホームフィード (ASCII 12) \r
リターン (ASCII 13) \^
[\
064-\
095][\064-\095]が表す制御文字 \\
文字\ \"
文字" \
十進数の番号を持つ文字 \
\
空白文字の列を無視する \u
16進数表現で表される番号を持つUTF-8文字列