Python の字句解析と構文解析

WBOY
WBOYオリジナル
2016-06-16 08:46:321440ブラウズ

字句解析: 文字で構成される単語が正しいかどうかを解析し、問題がなければ単語ストリームを生成します。

構文解析: 単語で構成された文が正しいかどうかを解析し、問題がなければ構文ツリーを生成します。

字句解析ツールがソース コード テキストを分析する場合、次の概念を明確にする必要があります。

1. 物理行: キャリッジ リターン文字シーケンス (Windows では CR LF、CR) で構成されます。 Unix の LF は LF) 物理行で終わる文字のシーケンス。

2. 論理行: 1 つ以上の物理行で構成され、明示的にバックスラッシュ () を使用して複数の物理行を 1 つの論理行に接続することができます。中括弧は複数の物理行にまたがることができますが、1 つの論理行として扱われます。

字句アナライザーは論理行を指向しています。つまり、字句アナライザーでは論理行のみが行とみなされ、論理行の末尾に単語 NEWLINE またはトークンのみが生成されます。

各インデントに対して、空白文字が何個含まれていても、字句アナライザーは、1 レベルのインデントを終了するときはいつでも、1 レベルのインデントを表す INDENT 単語またはトークンのみを生成します。アナライザーは DEDENT ワードまたはトークンを生成します。 DEDENT という単語には対応する文字や文字のグループはなく、完全に論理的な概念であることに注意してください。

Python は、語彙と文法規則を表すためにわずかに変更された BNF (Backus Normal Form) を使用します。

以下では、低レベルだが隠れたプログラミング エラーを回避するために注意する必要があることに焦点を当てます。

1. 識別子は大文字と小文字を区別しますが、2 つの変数を区別するために大文字と小文字の違いだけを使用するわけではありません。

2. 他のプログラミング言語のキーワードである識別子は、Python ではキーワードになる可能性があるため、変数名として使用しないでください。

3. Python が特別な意味を持つと明示的に宣言している識別子 (そのような変数は通常アンダースコアで始まります) は、その特別な意味を使用することがわかっている場合を除き、使用しないでください。

4. Python では $ と ? を使用しないでください (文字列内を除く)。これらは有効な文字ではありません。

5. インデントにタブとスペースを混在させず、どちらか 1 つだけを使用し、習慣化してください。

6. 整数リテラル定数には、10、16、8、2 のいくつかの表現方法があります。16 進数を使用する場合は 0xa または 0Xa を、8 進数を使用する場合は 0o7 または 0O7 を記述してください。バイナリ システムの場合は、システムを識別する文字を省略せずに 0b1 または 0B1 を入力してください。小文字のみを使用することをお勧めします。

7. 整数リテラル定数の後に l または L を追加して長整数を形成します。小文字の l は数字の 1 に見えるため、L のみを使用することをお勧めします。整数のビット表現には 32 を使用しますが、long 整数は表現できるビット数に制限がなく、メモリが許せば任意のサイズの整数を表現できます。これは C 言語などとは異なります。

9. 整数リテラルの値が 32 ビット整数の表現範囲を超える場合、Python は自動的にそれを長整数にアップグレードしますが、初期の Python 実装ではそうではない可能性があります。大きな整数値が必要になることが予想される場合は、明示的に長整数を使用してください。

10. 浮動小数点定数は 10 進形式のみです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。