Flex 2.5では、 以下のバッファ操作関数もサポートされています。
さらに、
Flex 2.5では、
メモリ上の文字列を操作するための入力バッファを作成する関数が提供されています。
いずれも、
新しく作成された入力バッファに対応するYY_BUFFER_STATE
型のハンドルを戻り値とします。
入力バッファを使い終わったら、
このハンドルを引数に指定してyy_delete_buffer()
を呼び出す必要があります。
YY_BUFFER_STATE yy_scan_string(const char *
str)
yy_scan_bytes()
を呼び出し、
その戻り値を返します。
YY_BUFFER_STATE yy_scan_bytes(const char *
bytes, int
len)
yy_scan_buffer()
を呼び出し、
その戻り値を返します。
yy_scan_buffer()
の第1引数には、
bytesではなく、
この関数の内部で獲得されたlen + 2
バイトの領域へのポインタが渡される点に注意してください。
yy_scan_buffer()
が呼び出される前に、
bytesから始まるlenバイトのデータが、
新たに獲得した領域にコピーされ、
さらに、
末尾の2バイトにYY_END_OF_BUFFER_CHAR
(‘\0’)がセットされます。
YY_BUFFER_STATE yy_scan_buffer(char *
base, yy_size_t
size)
YY_END_OF_BUFFER_CHAR
(‘\0’)でなければなりません。
この末尾2バイトは、
スキャン処理の対象になりません。
引数で指定されたメモリ領域の末尾2バイトがYY_END_OF_BUFFER_CHAR
でない場合は、
yy_scan_buffer()
はバッファを作成せず、
NULLポインタを返します。