これまで述べてきた例は、CファイルのI/O手続きとして定義済みのI/O操作のみを使ったとても簡単な例でした。さらに複雑な例として、UNIXベースの字句解析プログラムであるlexとのインタフェースのための新しいストリーム・クラスを定義するプログラムが、ディレクトリ$PROROOT/demos/stream/lexにあります。
Lexのためのストリーム定義によって、コンパイラのフロントエンドとしての構文解析器を簡単に開発することができるようになります。さらにいえば、lexがトークンに切り分け、他の外部デバイスが決定するようなプロトコルへのインタフェースを提供します。
lexストリーム定義がget述語と一緒に働くことを保証するために、トークン・バッファとそれへのインデックスを含むように、ストリームの定義を拡張することが必要でした。バッファが空になると、字句解析器が呼び出され、次のトークンを供給するようになっています。
マッチしたトークンはトークン値とマッチした文字列を含む構造としてIF/Prologに渡されますが、これは容易に変更することができます。