JavaScript 2.0
導入
表記法
previousupnext

2003/06/11 (Wed)

文字の表記

本草案では文字リテラルを表すのに以下の決まりに従う:

表示可能な ASCII 文字リテラル (16進数で 20 から 7E までの値) には青の等幅フォント (blue monospaced font) を用いる。Unicode 基本多言語平面の文字 (16進数で 0000 から FFFF までのコードポイント) はその4桁の16進数値を «u» で囲むことで表す。補助 Unicode 文字 (16進数で 10000 から 10FFFF までのコードポイント) はその8桁の16進数値を «U» で囲むことで表す。例えば改行なし空白文字 (NBSP) は «u00A0» 、コードポイントが16進数で 1234F の文字は «U0001234F» と書く。幾つかの一般的な制御文字は名前を使って表す:

省略形 Unicode 値
«NUL» «u0000»
«BS» «u0008»
«TAB» «u0009»
«LF» «u000A»
«VT» «u000B»
«FF» «u000C»
«CR» «u000D»
«SP» «u0020»

ドキュメント中の空白文字は、文脈から区別が付く場合は半角スペースで、他の表記と区別の付きにくい場合は «SP» を使う。

文法の表記

LR(1) [訳注: LR は構文解析法の1つ。高級言語の解析に使用される。LR(1) 、LALR(1) はその一種] の各構文文法字句文法は1つの非終端記号、1つの 、及び縦棒 (|) で分けられた1つ以上の非終端記号の展開から成る。展開は通常は異なる行に置くことで別々のものとするが、短い場合は同一行に記述する。空の展開は «empty» と表記する。

例として以下の規則を考える:

SampleList 
   «empty»
|  ... Identifier
|  SampleListPrefix
|  SampleListPrefix , ... Identifier

この規則は非終端記号 SampleList が4通りの入力トークン列で表現できるということを示す:

入力トークンは字句文法においては文字 (と特別なプレースホルダ End) であり、構文文法においては字句トークンである。入力トークンはそのまま青の等幅太字フォント (bold blue monospaced font) で記述し、入力トークンと非終端記号はそれぞれ空白で分割した。1つの空白から成る入力トークンは «SP» と記した。その他、非 ASCII 文字、表示不能文字も文字の表記の節に示した通り «» を使って記した。

lookahead 制限

生成規則の展開に “[lookahead  set]” という句がある場合、そのすぐ後ろの終端記号が set のメンバであればその生成規則は使用できないことを示す。この set は中括弧で囲まれた終端記号のリストで書くことができる。便宜のために set は1つの非終端記号 [訳注: 中括弧は必要らしい] として書いてもよく、その場合はその非終端記号から展開され得る全ての終端記号の集合を表す。

例えば、

DecimalDigit  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
DecimalDigits 
   DecimalDigit
|  DecimalDigits DecimalDigit

という規則があるとき、以下の規則は

LookaheadExample 
   n [lookahead  {13579}] DecimalDigits
|  DecimalDigit [lookahead  {DecimalDigit}]

文字 n の後ろに1つ以上数字が続きその最初の数字は偶数であるもの、或いは後ろに数字の続かない1文字の数字のいずれかにマッチする。

これら lookahead 制限は LR(1) 以上に文法を理論的に強力にするものではないが、これらの文法はより簡潔に記述できるようになる。意味解析エンジンは普通の LR(1) 、LALR(1) 文法から生成されるものと同じ形式の解析表をコンパイルにより生成する。

改行制限

生成規則の展開に “[no line break]” という句がある場合、文法でマッチした最後の終端記号の後ろに改行があればその生成規則は使用できないことを示す。改行制限は構文文法にのみ現れる。

パラメータ付けされた規則

似通った規則群に同じ文法規則が現れることは多い。これらの規則群は全て列挙せずに以下に示す簡便記法を使って要約した:

次のような変換定義は

   {normalinitial}
   {allowInnoIn}

文法上の引数 を導入する。規則の左側の非終端記号がこれらの引数によりパラメータ付けされると、その規則は暗黙の内に文法上の引数を一貫してその変数に置き換えた規則の集合に複製される。例えば次の規則は

AssignmentExpression, 
   ConditionalExpression,
|  LeftSideExpression = AssignmentExpressionnormal,
|  LeftSideExpression CompoundAssignment AssignmentExpressionnormal,

以下の4つの規則に展開される:

AssignmentExpressionnormal,allowIn 
   ConditionalExpressionnormal,allowIn
|  LeftSideExpressionnormal = AssignmentExpressionnormal,allowIn
|  LeftSideExpressionnormal CompoundAssignment AssignmentExpressionnormal,allowIn
AssignmentExpressionnormal,noIn 
   ConditionalExpressionnormal,noIn
|  LeftSideExpressionnormal = AssignmentExpressionnormal,noIn
|  LeftSideExpressionnormal CompoundAssignment AssignmentExpressionnormal,noIn
AssignmentExpressioninitial,allowIn 
   ConditionalExpressioninitial,allowIn
|  LeftSideExpressioninitial = AssignmentExpressionnormal,allowIn
|  LeftSideExpressioninitial CompoundAssignment AssignmentExpressionnormal,allowIn
AssignmentExpressioninitial,noIn 
   ConditionalExpressioninitial,noIn
|  LeftSideExpressioninitial = AssignmentExpressionnormal,noIn
|  LeftSideExpressioninitial CompoundAssignment AssignmentExpressionnormal,noIn

AssignmentExpressionnormal,allowIn はもはやパラメータ付けされていない非終端記号であり、文法により通常通り処理される。

展開された規則の中には (上記の例の4番目のものなど) 文法の開始非終端記号からは到達不可能なものもあり、これらは無視される。

特別な字句規則

幾つかの字句規則には実際に展開すると長大なリストになる展開を持つものもある。これらは の後ろに展開のリストを書かず、記述的なテキストで記した。

規則には変換語 (metaword) except を含むものもある。これらの規則は except より前のあらゆる展開にマッチするが、except より後ろの展開にはマッチしない。これらの規則は最終的には全て単一の文字に展開される。例えば以下の規則は */ 以外のあらゆる単一の UnicodeCharacter にマッチする:

NonAsteriskOrSlash  UnicodeCharacter except * | /

Waldemar Horwat
最終更新: 2003年6月11日 (水)
previousupnext
訳者: exeal <exeal@student.interq.or.jp>
このドキュメントのオリジナルは mozilla.org にこの和訳は、利用者の利便のために Mozilla Japan 翻訳部門 によって提供されています。
内容に関してご不明な点がありましたら webmaster までお問い合わせください。