字句解析(lexer.mll)

 

コンピュータにとっては、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という部分は、解析中の文字列を表す「おまじない」だと思ってください。

 

次へ進む