Python公式DOCをチラ見しよう【第1回】字句解析編
こんにちは、オオモリサン(@omori_saan)です。
Python公式ドキュメント(Python3.12.3版)を解説する連載の第1回として、今回は「2.字句解析」の章を取り上げます。
字句解析は、Pythonのソースコードを意味のある単位(トークン)に分割するプロセスです。この記事では、行構造、識別子、キーワード、リテラル、演算子、デリミタについて詳しく説明していきます。
1. 行構造
Pythonのプログラムは論理行に分割されます。論理行は一つ以上の物理行から構成され、明示的または暗黙的な行継続規則によって連結されます。
明示的な行継続は、行末のバックスラッシュ(\)を使って行います。例えば:
if 1900 < year < 2100 and 1 <= month <= 12 \
and 1 <= day <= 31 and 0 <= hour < 24 \
and 0 <= minute < 60 and 0 <= second < 60:
return 1
暗黙的な行継続は、丸括弧、角括弧、波括弧の内側で自動的に行われます。例えば:
month_names = ['Januari', 'Februari', 'Maart',
'April', 'Mei', 'Juni',
'Juli', 'Augustus', 'September',
'Oktober', 'November', 'December']
インデントはブロックを構成するために重要な役割を果たします。
同じブロックに属する文は同じインデントレベルでなければなりません。
2. その他のトークン
Pythonの字句解析は、NEWLINEやINDENT、DEDENTといった特殊なトークンの他に、識別子、キーワード、リテラル、演算子、デリミタを認識します。
3. 識別子およびキーワード
識別子(変数名、関数名など)は、Unicode標準UAX-31に基づいて定義されています。大文字と小文字のアルファベット、アンダースコア、数字(先頭は不可)などが使えます。
一方、キーワードはPythonの構文で特別な意味を持つ予約語です。例えば、if、for、while、defなどがキーワードです。
# 識別子の例
x = 1
my_variable = "hello"
# キーワードの例
if x > 0:
print("Positive")
4. リテラル
リテラルは、数値、文字列、バイト列などの定数値を表現します。
数値リテラルには、整数、浮動小数点数、虚数があります。アンダースコアを使って数字をグループ化できます。
# 整数リテラル
x = 1000_000_000
# 浮動小数点数リテラル
y = 3.14_15_93
# 虚数リテラル
z = 3.14j
文字列リテラルは、シングルクォート(')またはダブルクォート(")で囲みます。三連のクォートを使うと、複数行の文字列を表現できます。
# 文字列リテラル
s1 = 'hello'
s2 = "world"
s3 = '''This is a
multiline string'''
バイト列リテラルは、接頭辞'b'または'B'を付けた文字列リテラルです。
f-string(フォーマット済み文字列リテラル)を使うと、文字列の中に変数や式を埋め込むことができます。
name = "Alice"
age = 25
print(f"My name is {name} and I'm {age} years old.")
5. 演算子
演算子は値に対する操作を表します。算術演算子、比較演算子、論理演算子、ビット演算子などがあります。
x + y # 加算
x - y # 減算
x * y # 乗算
x / y # 除算
x // y # 切り捨て除算
x % y # 剰余
x ** y # べき乗
x == y # 等しい
x != y # 等しくない
x > y # 大なり
x >= y # 大なりイコール
x < y # 小なり
x <= y # 小なりイコール
x & y # ビット単位AND
x | y # ビット単位OR
x ^ y # ビット単位XOR
~x # ビット反転
x << y # 左シフト
x >> y # 右シフト
6. デリミタ
デリミタは、式や文の構成要素を区切るために使われる記号です。括弧類、カンマ、コロン、セミコロンなどがデリミタに該当します。
(x + y) * z # 丸括弧
my_list[i] # 角括弧
my_dict = {} # 波括弧
x, y = 1, 2 # カンマ
if x == 1: y = 2 # コロン
print(x); print(y) # セミコロン
以上が、Pythonの字句解析の概要です。次回は、「3.データモデル」の章を取り上げる予定です。お楽しみに!