Lexing

このページは最後に更新されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

last mod. 2009-09-10 (木) 19:35:06

Chapter 20 標準ライブラリ

module Lexing: sig  end

ocamllex によって生成された字句解析器のランタイムライブラリです。


Lexer buffers

type lexbuf = {
  refill_buff : lexbuf -> unit;
  mutable lex_buffer : string;
  mutable lex_buffer_len : int;
  mutable lex_abs_pos : int;
  mutable lex_start_pos : int;
  mutable lex_curr_pos : int;
  mutable lex_last_pos : int;
  mutable lex_last_action : int;
  mutable lex_eof_reached : bool;
  mutable lex_mem : int array;
  mutable lex_start_p : position;
  mutable lex_curr_p : position;
}

字句解析バッファの型です。字句解析バッファは、生成されたスキャナの関数に引数として渡されます。字句解析バッファはスキャナの現在の状態と、入力を読んでバッファを埋め直す関数を持っています。

val from_channel : Pervasives.in_channel -> lexbuf

入力チャンネルから字句解析バッファを作成します。 Lexing.from_channel inchan は入力チャンネル inchan を現在の読み込み位置から読み込む字句解析バッファを返します。

val from_string : string -> lexbuf

文字列から字句解析バッファを作成します。文字列の先頭から読み始めて、文字列の終端に到達したら end-of-input 状態になります。

val from_function : (string -> int -> int) -> lexbuf

関数を読み込みメソッドとして字句解析バッファを作成します。 スキャナはさらに文字が必要になると、引数に文字列 s と文字数 n をとって与えられた関数を呼び出します。関数では s の先頭から n 以下の文字を書き込んで、書き込んだ文字数を返してください。返値 0 は end-of-input を意味します。

Functions for lexer semantic actions

以下の関数は字句解析器定義の action (字句解析関数が返す値を計算する、中括弧で囲まれた ML コード) から呼ぶことができます。action に対応した正規表現にマッチする文字列を得ることができます。これらの関数は引数 lexbuf に適用してください。lexbuf は ocamllex によって生成されたコードの中で、構文解析関数に渡される字句解析バッファに束縛されています。

val lexeme : lexbuf -> string

Lexing.lexeme lexbuf は正規表現にマッチした文字列を返します。

val lexeme_char : lexbuf -> int -> char

Lexing.lexeme_char lexbuf i はマッチした文字列の i 番目の文字を返します。

val lexeme_start : lexbuf -> int

Lexing.lexeme_start lexbuf はマッチした文字列の先頭文字が、入力ストリームの先頭から何文字目であるかを返します。 ストリームの先頭文字の位置は 0 です。

val lexeme_end : lexbuf -> int

Lexing.lexeme_end lexbuf はマッチした文字列の終端文字が、入力ストリームの先頭から何文字目であるかを返します。 ストリームの先頭文字の位置は 0 です。

val lexeme_start_p : lexbuf -> position

lexeme_start に似ているが、何文字目であるかの代わりに position を返します。

val lexeme_end_p : lexbuf -> position

lexeme_end に似ているが、何文字目かの代わりに position を返します。

新規 編集 添付