プログラミング言語SML#解説 4.1.0版
30 構文解析器生成ツール smlyaccとsmllex

30.4 smllex入力ファイルの構造

smllexの入力ファイルは以下の形式で記述する.

ユーザ定義
%%
字句解析のためのLEX宣言
%%
正規表現とその属性の定義

  1. 1.

    ユーザ定義セクション 字句解析処理が使用する型の定義,正規表現の属性定義等で使用する補 助関数などのユーザコードを指定する.

    以下の2つは必ず指定しなければならない.

       type lexresult = ...
       fun eof () = ...
    
    • lexresult 型. 字句解析器が正規言語を受理した時に返す値の型を指定する. smlyaccと共に使用する場合は,通常, YaccInputFile.grmファイルで定義するtoken型である.

    • eof 関数. 構文解析器がファイル終了を検出した時に呼び出される関数. lexresult型の値でend of fileを表現する値を返す.

  2. 2.

    LEX宣言セクション

    smllexの動作に関する指示や,正規言語を定義するための補助定義などを宣言する. 正規言語を定義するための補助定義は,通常のLEXシステムと同様である.

    smllexの動作に関する指示には以下のものがある.

    • %structure declareation. smllexは,字句解析プログラムを一つのストラクチャとして生成する. 本宣言では,そのストラクチャの名前を以下のように指定する.

          %structure MLLex
      
    • %arg declareation. smllexが生成する字句改正プログラムに与えるユーザ引数の型を指定する. ユーザ引数が必要ない場合は省略可能である.

    • %full declareation. 8bit文字を使用することを宣言する. 日本語を扱う場合はこの指定をする必要がある.

  3. 3.

    正規言語セクション 認識すべき字句の集合を正規表現で指定する.

指定の詳細は,src/ml-lex/doc/mllex.pdfを参照.