结构

GLibScanner

描述 [src]

struct GScanner {
  gpointer user_data;
  guint max_parse_errors;
  guint parse_errors;
  const gchar* input_name;
  GData* qdata;
  GScannerConfig* config;
  GTokenType token;
  GTokenValue value;
  guint line;
  guint position;
  GTokenType next_token;
  GTokenValue next_value;
  guint next_line;
  guint next_position;
  GScannerMsgFunc msg_handler;
}

GScanner 提供了一般的目的的词法分析器。

创建扫描器后应设置 input_name,因为显示警告和错误时默认消息处理程序使用此名称。如果要扫描一个文件,文件名会是一个不错的选择。

user_datamax_parse_errors 字段未使用。如果你需要将额外的数据与扫描器关联,可以将其放在这里。

如果要使用自己的消息处理程序,可以设置 msg_handler 字段。消息处理程序函数的类型由 GScannerMsgFunc 声明。

结构成员
user_data

未使用。

max_parse_errors

未使用。

parse_errors

G_scanner_error() 增加此字段。

input_name

输入流的名称,由默认消息处理程序显示。

qdata

Quarked 数据。

config

链接到扫描器配置。

token

通过上一个 g_scanner_get_next_token() 解析的令牌。

value

最后一个令牌的值,来自 g_scanner_get_next_token()。

line

来自 g_scanner_get_next_token() 的上一个令牌的行号。

position

来自 g_scanner_get_next_token() 的上一个令牌的字符号。

next_token

通过上一个 g_scanner_peek_next_token() 解析的令牌。

next_value

最后一个令牌的值,来自 g_scanner_peek_next_token()。

next_line

来自 g_scanner_peek_next_token() 的上一个令牌的行号。

next_position

来自 g_scanner_peek_next_token() 的上一个令牌的字符号。

msg_handler

_warn 和 _error 的处理程序函数。

功能

g_scanner_new

创建一个新的 GScanner

实例方法

g_scanner_cur_line

返回输入流中的当前行(从 1 计数)。这是通过 g_scanner_get_next_token() 解析的最后一个令牌的行。

g_scanner_cur_position

返回当前行中的当前位置(从 0 计数)。这是通过 g_scanner_get_next_token() 解析的最后一个令牌的位置。

g_scanner_cur_token

获取当前令牌类型。这只是 GScanner 结构中的 token 字段。

g_scanner_cur_value

获取当前令牌值。这只是 GScanner 结构中的 value 字段。

g_scanner_destroy

释放 GScanner 使用的所有内存。

g_scanner_eof

如果扫描器已到达文件或文本缓冲区的结尾,则返回 TRUE

g_scanner_error

通过 GScanner 消息处理程序输出错误消息。

g_scanner_get_next_token

根据 g_scanner_peek_next_token() 解析下一个标记,并将其从输入流中移除。标记数据将放置在 GScanner 结构体的 tokenvaluelineposition 字段中。

g_scanner_input_file

准备扫描一个文件。

g_scanner_input_text

准备扫描一个文本缓冲区。

g_scanner_lookup_symbol

在当前范围内查找一个符号并返回其值。如果符号未在当前范围内绑定,则返回 NULL

g_scanner_peek_next_token

根据 g_scanner_peek_next_token() 解析下一个标记,但不会将其从输入流中移除。标记数据将放置在 GScanner 结构体的 next_tokennext_valuenext_linenext_position 字段中。

g_scanner_scope_add_symbol

向指定范围添加一个符号。

g_scanner_scope_foreach_symbol

调用指定函数来处理 GScanner 给定范围中每一对符号/值。指定 user_data 参数会将符号和值传递给每一对。

g_scanner_scope_lookup_symbol

在作用域中查找符号并返回其值。如果作用域中未绑定符号,则返回 NULL

g_scanner_scope_remove_symbol

从指定范围内移除一个符号。

g_scanner_set_scope

设置当前范围。

g_scanner_sync_file_offset

将文件描述符倒回到当前缓冲区位置,并清空文件预读缓冲区。这在第三方使用扫描仪文件描述符(挂接到当前扫描位置)时很有用。

g_scanner_unexp_token

通过扫描仪的 msg_handler 输出一条消息,该消息是由输入流中的意外标记产生的。请注意,不要在未调用 g_scanner_get_next_token() 的情况下调用 g_scanner_peek_next_token() 后面跟着 g_scanner_unexp_token(),因为 g_scanner_unexp_token() 会评估扫描仪的当前标记(而不是预览标记)来构建部分 message。

g_scanner_warn

通过 GScanner 消息处理程序输出一条警告消息。