字句解析と構文に関する記述では、BNF 文法記法に手を加えたものを 使っています。この記法では、以下のような記述形式をとります:
name: lc_letter (lc_letter | "_")* lc_letter: "a"..."z"
最初の行は、name
が lc_letter
の後ろに ゼロ個または
それ以上の lc_letter
とアンダースコアが続いたものであることを
示しています。
そして、lc_letter
は "a" から "z" までの
何らかの文字一字であることを示します (この規則は、このドキュメントに
記述されている字句規則と構文規則において定義されている名前 (name) で
一貫して使われています)。
各規則は name (規則によって定義されているものの名前) とコロン一つから
始まります。垂直線 (|
) は、複数の選択項目を分かち書きするときに
使います; この記号は、この記法において最も結合優先度の低い演算子です。
アスタリスク (*
) は、直前にくる要素のゼロ個以上の繰り返しを
表します; 同様に、プラス (+
) は一個以上の繰り返しで、角括弧
([ ]
) に囲われた字句は、字句がゼロ個か一個出現する
(別の言い方をすれば、囲いの中の字句はオプションである) ことを示し
ます。*
および +
演算子の結合範囲は可能な限り狭く
なっています; 字句のグループ化には丸括弧を使います。
リテラル文字列はクオートで囲われます。空白はトークンを分割している
ときのみ意味を持ちます。規則は通常、一行中に収められています;
多数の選択肢のある規則は、最初の行につづいて、垂直線の後ろに
各々別の行として記述されます。
(上の例のような) 字句定義では、他に二つの慣習が使われています:
三つのドットで区切られている二つのリテラル文字は、二つの文字の
ASCII 文字コードにおける (包含的な) 範囲から文字を一字選ぶ
ことを示します。各カッコ中の字句 (<...>
) は、定義済みの
シンボルを記述する非形式的なやりかたです; 例えば、
`制御文字' を書き表す必要があるときなどに使われることがあります。
字句と構文規則の定義の間で使われている表記はほとんど同じですが、 その意味には大きな違いがあります: 字句定義は入力ソース中の個々の 文字を取り扱いますが、構文定義は字句解析で生成された一連の トークンを取り扱います。次節 (``字句解析'') における BNF はすべて 字句定義のためのものです; それ以降の章では、構文定義のために 使っています。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。