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