结构
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_data
和 max_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_get_next_token
根据 g_scanner_peek_next_token()
解析下一个标记,并将其从输入流中移除。标记数据将放置在 GScanner
结构体的 token
、value
、line
和 position
字段中。
g_scanner_peek_next_token
根据 g_scanner_peek_next_token()
解析下一个标记,但不会将其从输入流中移除。标记数据将放置在 GScanner
结构体的 next_token
、next_value
、next_line
和 next_position
字段中。
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。