【じくかいせき】

字句解析 とは?

💡 プログラムの文字列を「単語カード」に切り分ける最初の仕事
📌 このページのポイント
字句解析(レキサー)の流れ ソースコード int x = 10; 字句解析器 (レキサー) 空白・コメント除去 トークン列 int x = 10 ; トークンの種別 キーワード int, if, return 識別子 x, count, name リテラル 10, 3.14, "abc" 演算子・区切り +, =, ;, (
字句解析のイメージ
ひよこ ひよこ

字句解析って何をするの?

ペンギン先生 ペンギン先生

ソースコードの文字の並びを、意味のある最小単位「トークン」に切り分ける処理だよ。たとえば「int x = 10;」なら「int」「x」「=」「10」「;」の5つのトークンに分けるんだ。

ひよこ ひよこ

なんでわざわざ切り分ける必要があるの?

ペンギン先生 ペンギン先生

構文解析器が構文をチェックするとき、1文字ずつ見るのは大変だからだよ。あらかじめ「キーワード」「数値」「演算子」のように分類されたトークン列にしておくと、次の処理が楽になるんだ。

ひよこ ひよこ

空白やコメントはどうなるの?

ペンギン先生 ペンギン先生

基本的にはこの段階で捨てられるよ。構文解析には不要だからね。ただしPythonのようにインデントが意味を持つ言語では、字句解析で特別なトークンを生成することもあるんだ。

ひよこ ひよこ

トークンってどうやって認識するの?

ペンギン先生 ペンギン先生

正規表現や有限オートマトンを使うよ。たとえば「数字が1つ以上続いたら数値リテラル」「英字で始まって英数字が続いたら識別子」のようにパターンで判定するんだ。

ひよこ ひよこ

字句解析でエラーになることもあるの?

ペンギン先生 ペンギン先生

あるよ。閉じ忘れた文字列リテラルや、言語で許可されていない文字が出てきたらエラーになるね。flexやre2cといった字句解析器生成ツールを使えば、正規表現からレキサーを自動生成することもできるんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「字句解析」って出てきたら「ソースコードを単語単位に切り分ける最初のステップ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Lexical Analysis」 = 語句の解析
💬 lexical は「語彙の」という意味で、文章を単語レベルで分析する工程を指すよ
← 用語集にもどる