13、Flex扫描器的综合使用与技术要点解析

Flex扫描器的综合使用与技术要点解析

一、字面块的复制规则

在Flex中,每个字面块的内容会逐字复制到生成的C源文件中。定义部分的字面块会在 yylex() 函数开始之前复制,通常包含规则部分代码使用的变量和函数声明,以及头文件的 #include 语句。如果字面块以 %top{ 开头而非 %{ ,它会被复制到生成程序的开头附近,常用于设置 #include 文件或 #define 行来设定 YY_BUF_SIZE 。规则部分开头的字面块会在 yylex() 函数中局部变量声明之后复制,可包含更多声明和设置代码;规则部分其他位置的字面块会被复制到 yylex() 中未指定的位置,因此应只包含注释。

二、一个程序中的多个词法分析器

在同一个程序中,可能需要处理两种部分或完全不同的标记语法的词法分析器。例如,交互式调试解释器可能有一个用于编程语言的词法分析器,另一个用于调试器命令。处理一个程序中的两个词法分析器有两种基本方法:

(一)组合词法分析器

可以通过使用起始状态将两个词法分析器组合成一个。每个词法分析器的所有模式都以一组唯一的起始状态为前缀。词法分析器启动时,需要一些代码将其置于正在使用的特定词法分析器的适当初始状态。示例代码如下:

%s INITA INITB INITC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值