纯扫描器与解析器的使用与实现
1. 引言
在编程领域,扫描器和解析器是处理文本输入的重要工具。纯扫描器和解析器在多线程、多实例等复杂场景下具有重要作用。本文将详细介绍纯扫描器和解析器的相关知识,包括其原理、实现方法以及实际应用。
2. Flex 中的纯扫描器
2.1 扫描器状态管理
一个扫描任务可能涉及多次对 yylex() 的调用,因为它会将标记返回给调用程序。由于扫描器的状态需要在调用之间保存,因此需要自己管理每个扫描器的数据。Flex 提供了创建和销毁扫描器上下文的例程,以及访问以前存储在静态变量(如 yyin 和 yytext )中的扫描器值的例程,允许 yylex() 外部的例程获取和设置这些值。
以下是相关代码示例:
yyscan_t scaninfo; // 指向每个实例扫描器数据的指针
int yylex_init(&scaninfo); // 创建一个扫描器
int yylex_init_extra(userstuff, &scaninfo); // 或使用指向用户数据的指针创建一个扫描器
yyset_in(stdin, scaninfo); // 设置输入文件和其他参数
while( ... ) {
tok = yylex(scaninfo); // 持续调用直到完成
}
yylex_destroy(scaninfo); // 释放扫描器数据
超级会员免费看
订阅专栏 解锁全文
49

被折叠的 条评论
为什么被折叠?



