纯扫描器与解析器的深入解析
1. 纯扫描器(Pure Scanners)
在Flex中,单个扫描任务可能会多次调用yylex()函数,因为它会将标记返回给调用程序。由于扫描器的状态需要在调用之间保存,所以需要自行管理每个扫描器的数据。Flex提供了创建和销毁扫描器上下文的例程,以及访问扫描器值的例程,这些值过去存储在像yyin和yytext这样的静态变量中,现在允许yylex()之外的例程获取和设置它们。
以下是创建和使用纯扫描器的基本步骤:
1.定义扫描器信息指针:
yyscan_t scaninfo;- 初始化扫描器:
int yylex_init(&scaninfo);或者,若需要传递用户数据:
int yylex_init_extra(userstuff, &scaninfo);- 设置输入文件:
yyset_in(stdin