Flex扫描器使用指南
1. 字面块的复制规则
在生成C源文件时,每个字面块的内容会逐字复制到文件中。定义部分的字面块会在 yylex() 函数开始之前复制,通常包含规则部分代码使用的变量和函数声明,以及头文件的 #include 行。
如果字面块以 %top{ 开头而非 %{ ,它会被复制到生成程序的开头附近,通常用于设置 YY_BUF_SIZE 的 #include 文件或 #define 行。规则部分开头的字面块会在 yylex() 函数中局部变量声明之后复制,因此可以包含更多声明和设置代码。规则部分其他位置的字面块会被复制到 yylex() 中未指定的位置,所以应该只包含注释。
2. 一个程序中使用多个词法分析器
在同一个程序中,可能需要为两种部分或完全不同的令牌语法使用词法分析器。例如,交互式调试解释器可能为编程语言使用一个词法分析器,为调试器命令使用另一个词法分析器。处理一个程序中的两个词法分析器有两种基本方法:将它们组合成一个词法分析器,或者将两个完整的词法分析器放入程序中。
2.1 组合词法分析器
可以通过使用起始状态将两个词法分析器组合成一个。每个词法分析器的所有模式都以一组唯一的起始状态为前缀。词法分析器启动时,需要一些代码将其置于正在使用的特定词法分析器的适当初始状态,例如以下代码(将复制到 yylex() </
超级会员免费看
订阅专栏 解锁全文
3

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



