【じくかいせき】

字句解析 とは?

最終更新:
💡 コードを、次の処理で扱える単語カードに分ける

ソースコードの文字を言語の規則に従って読み、識別子・数値・演算子などのトークン列にする処理。構文解析がトークンの並びを扱う前段として使われる。空白や改行の扱いは言語によって異なり、すべてを捨てるわけではない。

📌 このページのポイント
字句解析:コードをトークンに分けるx = 10 + 2x名前=演算子10数値+演算子2数値次は構文解析へトークンの並びから、式や文の構造を読む空白や改行の扱いは、言語のルールで違うよ
簡略化した代入式の字句解析例。改行や終端などのトークンは省略しています。
ひよこ ひよこ
字句解析では、何を取り出すの?
ペンギン先生 ペンギン先生
文字の並びを、名前・数値・演算子などのトークンにするよ。たとえばx = 10 + 2なら、x、=、10、+、2という単位を取り出せる。種類や値などの情報も次の処理に渡すんだ。
ひよこ ひよこ
空白で、区切るだけでよい?
ペンギン先生 ペンギン先生
そうではないよ。x=10+2のように空白がなくても規則で区切れるし、文字列の中の空白は内容になる。何をトークンとするかは、言語のルールに従って決めるんだ。
ひよこ ひよこ
空白やコメントは、全部捨てる?
ペンギン先生 ペンギン先生
言語によるよ。Pythonでは改行やインデントがトークンや構造に関わる。コメントは構文では無視されるが、先頭の特定のコメントを文字コードの指定として処理する場合もあるんだ。
ひよこ ひよこ
構文解析とは、どう違う?
ペンギン先生 ペンギン先生
字句解析は部品を取り出し、構文解析はその並びがどんな構造になるかを調べるよ。単語カードを作る仕事と、カードから式や文を組み立てる仕事、と考えると分かりやすいね。
ひよこ ひよこ
どんな方法で、作るの?
ペンギン先生 ペンギン先生
LLVMの入門例では、文字を順に読み、名前・数値・コメントなどを分ける関数を作っているよ。すべての字句解析器が同じ実装ではない。入門用の例もエラー検査は十分ではないので、実用では言語仕様に合う検査が必要だね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「字句解析」って出てきたら「コードの文字を、扱いやすいトークンに分ける処理」と思えばだいたいOK!
📖 おまけ:英語の意味
「Lexical analysis」 = 語彙の単位を取り出す解析
💬 処理する部品はlexerなどと呼ばれるよ。Pythonの公式資料ではtokenizerという呼び方も使われているんだ。

参考資料

← 用語集にもどる