TL;DR
ソースコードなどの文字列を先頭から読み、意味のある最小単位(トークン)に分割することである。
仕組み
トークンは、文法や意味の解析で基本となる単位である。通常は、キーワード、識別子、演算子、文字列、区切り文字などを指す。字句解析を行うプログラムを字句解析器(トークナイザ)と呼ぶ。
Wikipedia によると、字句解析は自然言語処理にもプログラムのコンパイルにも使われる。字句解析器のうち、文字列からトークンになる部分を切り出すものはスキャナと呼ばれ、有限状態機械としてモデル化できる。切り出すときは、トークンとして受理できる範囲でできるだけ長く一致させる「最長一致」の規則が一般的である。切り出したトークンには、次の段階で整数値などの意味を付ける。
字句解析器は手で書くこともあるが、正規表現でトークンの規則を書くと字句解析器を生成する Lex(1975 年)や、それを改良した Flex(1987 年)などのツールもある。
例
Wikipedia の例では、present := initial + 15 は、識別子、代入演算子、識別子、演算子、数の 5 つのトークンに分けられる。空白はトークンを区切るだけなので、通常は取り除かれる。
注意点
字句解析の段階では、変数が宣言されているかといった、プログラムとしての正しさは必ずしも確かめない。字句解析と構文解析の分担は絶対的なものではなく、PEG(Parsing Expression Grammar)のように字句の規則を構文の規則と一緒に扱う方法もある。
関連
- トークン
- ステートマシン