字句解析
Lexical analysis
ある言語で書かれたテキストを読んで、その字がどういう意味で使われているのかを解析して、内部的なトークンに置き換える。 文脈に強く依存する。
プログラミング言語であれば、例えば、以下の式を字句解析すると
if x < 123 then print "yes"
以下のようなトークン列に変換する。(概念なので正確ではない)
[トークンif, 識別子x 比較演算子<, 数値123, トークンthen, 識別子print, 文字列yes]
ステートマシンによるオートマトンとして実装するのが一般的。
プログラムは現在の状態を持ち、次に来る文字が何であるかによって、状態遷移する。
いちいち一連の文字を辞書で比較するような方法を採らない。状態遷移方式にすると、高速に解析することができる。
現在では、字句解析と構文解析はほぼ一体の物になっている。
いちいち字句解析と構文解析を分けて書くことが面倒だと考えられてきている。
古くは字句解析後に構文解析という進んでいたが、これだと文法が混在する言語(組み込み言語)を取り扱うことができない。 正規表現は字句解析の一種