\chapter{導入\label{introduction}} このリファレンスマニュアルは、Python プログラミング言語自体に関する 記述です。チュートリアルとして書かれたものではありません。 私は本マニュアルをできるだけ正確に書こうとする一方で、文法や 字句解析以外の全てについて、形式化された仕様記述ではなく英語を 使うことにしました。そうすることで、このドキュメントが平均的な 読者にとってより読みやすくなっているはずですが、ややあいまいな 部分も残っていることでしょう。 従って、もし読者のあなたが火星から来ている人で、このドキュメントだけ から Python を再度実装しようとしているのなら、色々と推測しなければ ならないことがあり、実際にはおそらく全く別の言語を実装する羽目に なるでしょう。 逆に、あなたが Python を利用しており、Python 言語のある特定の領域に おいて、厳密な規則が何か疑問に思った場合、その答えはこのドキュメント で確実に見つけられることでしょう。 もしより形式化された言語定義をお望みなら、あなたの時間を提供して いただいてかまいません --- もしくは、クローン生成装置でも発明して ください :-) 。 実装に関する詳細を言語リファレンスのドキュメントに載せすぎるのは 危険なことです --- 実装は変更されるかもしれず、同じ言語でも異なる 実装は異なった動作をするかもしれないからです。一方、広く使われている Python 実装は現在のところ唯一 (今や第二の実装が存在しますが!) なので、 特定のクセについては、特に実装によって何らかの制限が加えられている 場合には、触れておく価値があります。従って、このテキスト全体にわたって 短い ``実装に関する注釈 (imprementation notes)'' がちりばめられて います。 Python 実装はいずれも、数々の組み込みモジュールと標準モジュールが 付属します。これらはここではドキュメント化されていませんが、 \citetitle[../lib/lib.html]{Python ライブラリリファレンス} でドキュメント化されています。いくつかの組み込みモジュールについて は、言語定義と重要なかかわりをもっているときについて触れています。 \section{本マニュアルにおける表記法\label{notation}} 字句解析と構文に関する記述では、BNF 文法記法に手を加えたものを 使っています。この記法では、以下のような記述形式をとります: \index{BNF} \index{grammar} \index{syntax} \index{notation} \begin{verbatim} name: lc_letter (lc_letter | "_")* lc_letter: "a"..."z" \end{verbatim} 最初の行は、\code{name} が \code{lc_letter} の後ろに ゼロ個または それ以上の \code{lc_letter} とアンダースコアが続いたものであることを 示しています。 そして、\code{lc_letter} は \character{a} から \character{z} までの 何らかの文字一字であることを示します (この規則は、このドキュメントに 記述されている字句規則と構文規則において定義されている名前 (name) で 一貫して使われています)。 各規則は name (規則によって定義されているものの名前) とコロン一つから 始まります。垂直線 (\code{|}) は、複数の選択項目を分かち書きするときに 使います; この記号は、この記法において最も結合優先度の低い演算子です。 アスタリスク (\code{*}) は、直前にくる要素のゼロ個以上の繰り返しを 表します; 同様に、プラス (\code{+}) は一個以上の繰り返しで、角括弧 (\code{[ ]}) に囲われた字句は、字句がゼロ個か一個出現する (別の言い方をすれば、囲いの中の字句はオプションである) ことを示し ます。\code{*} および \code{+} 演算子の結合範囲は可能な限り狭く なっています; 字句のグループ化には丸括弧を使います。 リテラル文字列はクオートで囲われます。空白はトークンを分割している ときのみ意味を持ちます。規則は通常、一行中に収められています; 多数の選択肢のある規則は、最初の行につづいて、垂直線の後ろに 各々別の行として記述されます。 (上の例のような) 字句定義では、他に二つの慣習が使われています: 三つのドットで区切られている二つのリテラル文字は、二つの文字の \ASCII{} 文字コードにおける (包含的な) 範囲から文字を一字選ぶ ことを示します。各カッコ中の字句 (\code{<...>}) は、定義済みの シンボルを記述する非形式的なやりかたです; 例えば、 `制御文字' を書き表す必要があるときなどに使われることがあります。 \index{lexical definitions} \index{ASCII@\ASCII} 字句と構文規則の定義の間で使われている表記はほとんど同じですが、 その意味には大きな違いがあります: 字句定義は入力ソース中の個々の 文字を取り扱いますが、構文定義は字句解析で生成された一連の トークンを取り扱います。次節 (``字句解析'') における BNF はすべて 字句定義のためのものです; それ以降の章では、構文定義のために 使っています。