126
4
章 能力を高める
字句解析(Lexical analysis)
生の文字列を読んで、トークン(token)のシーケンスに変換します。それぞれのトークンは「変
数名」、「開き括弧」、「
while
キーワード」といった、プログラム構文の個々の構成要素を表現しま
す。字句解析器は字句文法(lexical grammar)と呼ばれる言語固有の規則の集合を使って、文字
のシーケンスがどのトークンを生成するかを決めます。このステージでは、変数の命名規則、コ
メント、空白といった厄介な文字レベルの詳細に取り組み、次のステージで使う、きれいなトーク
ンのシーケンスを残します。
構文解析(Syntactic analysis)
トークンのシーケンスを読んで、パースされる言語の構文文法(syntactic grammar)にしたがっ
て、有効なプログラムを表現しているか判断します。もし有効なプログラムであれば、構文解析
器は構造に関する追加の情報(たとえば、構文木)を生成します。
4.3.1
字句解析
字句解析ステージは通常、非常にわかりやすいものです。これは正規表現を使って(すなわち、
NFAによって)実現することができます。なぜなら、ここで必要なのは、単なる文字のフラットなシー
ケンスをいくつかの規則にマッチさせ、それらをキーワード、変数名、演算子などに判別することだけ
だからです。SIMPLEプログラムをトークンに切り分けるための、とりあえずのRubyコードは以下の
ようになります。
class LexicalAnalyzer ...