コンピュータにとっては、MLプログラムといえども、はじめはただの文字列です。たとえばさっきのgcdだったら、
「l」「e」「t」「 」「r」「e」「c」「 」「g」「c」「d」「 」「m」「 」「n」「 」「=」...
のように見えるわけです。このままでは何もできないので、まず
「let」「rec」「gcd」「m」「n」「=」...
のような字句に区切ります。この処理を字句解析といいます。
字句解析にはいろいろな方法がありますが、ここではocamllexという、まさにOCamlで字句解析をするためのツールを利用します。そのファイルがlexer.mllです。ocamllexについての詳細はマニュアル(ないし和訳)を参照してもらうことにして、概要だけ説明すると、
| '-'? digit+
{ INT(int_of_string (Lexing.lexeme lexbuf)) }
といったパターンマッチングのような構文により、「正規表現'-'?
digit+にマッチしたら字句INTを返す」等のルールを並べて書けばOKです。字句を表すデータ型(INTなど)は、次に述べるparser.mlyで定義されています。Lexing.lexeme
lexbufという部分は、解析中の文字列を表す「おまじない」だと思ってください。