flex学习 - 文件结束规则和其它的宏

news/2025/3/14 21:52:20/文章来源:https://www.cnblogs.com/xiaobing3314/p/18772959

第十章文件结束规则
特殊规则<>表示当遇到文件结束时要采取的操作,并且yywrap()返回非0(即,表示没有其它文件需要处理)。这个动作必须完成以下操作之一:
1、给yyin赋值新的输入文件(在以前版本的flex中,在完成赋值后,必须调用特殊操作YY_NEW_FILE。这已经没有必要了。)
2、执行一个return语句
3、执行一个特殊的yyterminate()动作
4、或者,使用yy_switch_to_buffer()切换到新的缓冲区,如上面示例一样
<>规则可以不被用于其它的模式;它们可能只符合一系列的开始条件。如果给出了不合格的<>规则,则它适用于所有尚未具有<>操作的启动条件。要为初始启动条件指定<>规则,使用:
<>
这些规则对于捕获未关闭注释之类的东西很有用。例如:
%x quote
%%

...other rules for dealing with quotes...<quote><<EOF>>   {error( "unterminated quote" );yyterminate();}

<> {
if ( *++filelist )
yyin = fopen( *filelist, "r" );
else
yyterminate();
}
第十一章其它的宏
可以定义宏YY_USER_ACTION来提供一个总是在匹配规则的操作之前执行的操作。例如,可以使用#define来调用一个程序将yytext转换为小写。当调用YY_USER_ACTION时,变量yy_act给出匹配规则的编号(规则从1开始编号)。假设您想要分析每条规则匹配的频率。下面的方法可以达到这个效果:
#define YY_USER_ACTION ++ctr[yy_act]
这里的ctr是一个持有不同规则数量计数的数组。请注意,宏YY_NUM_RULES给出了规则的总数(包括默认规则),即使你使用’-s’,所以正确的ctr的声明是:
int ctr[YY_NUM_RULES];
可以定义宏YY_USER_INIT来提供一个操作,该操纵总是在第一次扫描之前执行(并且在扫描器的内部初始化完成之前)。例如,它可以用来调用一个程序来读取数据表或打开日志文件。
宏yy_set_interactive(is_interactive)可以被用来控制当前缓冲区是否被考虑为interactive。交互式缓冲区的处理速度较慢,但是当扫描器的输入源由于等待填充缓冲区必须是交互式以避免问题时这个必须被使用(查看在扫描器选项章节中对于’-I’标志的讨论)。宏调用参数的非零值将缓冲区标记为交互式,零值表示非交互式。请注意,使用此宏将覆盖%option always-interactive或%option never-interactive(查看扫描器选项章节)。在开始扫描被认为是(或不是)交互式的缓冲区前,必须调用yy_set_interactive()。
宏yy_set_bol(at_bol)可以被用于控制当前缓冲区的下一个标记匹配的扫描上下文是否像在一行的开头一样完成。非0的宏参数使用’’锚定的规则处于活动状态,而0参数使’’规则处于非活动状态。
如果从当前缓冲器扫描的下一个标记有’^’规则激活则宏YY_AT_BOL()返回真,其它的返回假。
在生成的扫描器中,所有动作都聚集在一个大的switch语句中,并使用YY_BREAK分割,这个YY_BREAK是可以重新定义的。默认情况下,它只是一个break,为了将每个规则的操作与下一个规则的操作分开。允许重定义YY_BREAK,例如,C++用户 #define YY_BREAK什么也不做(同时要非常小心,每个规则都可以以break或return结束)避免出现不可达语句告警,因为规则的动作以return结束,所以YY_BREAK不可达。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/898892.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Tomcat RCE漏洞复现(CVE-2025-24813)

今日官方披露 Apache Tomcat partial PUT文件上传反序列化漏洞。在 CVE-2025-24813 中tomcat开启文件会话持久化,攻击者可利用PUT上传文件,并构造恶意请求触发session文件反序列化。漏洞描述 该漏洞的核心在于不完整PUT请求上传时 Tomcat 会使用了一个基于用户提供的文件名和…

SparkSubmit提交任务到yarn及报错解决方案

SparkSubmit提交任务到yarn及报错解决方案@目录一、提交任务代码二、Linux提交可能出现的问题及解决方案情况1:JSON解析异常情况2:java.lang.InstantiationException spark.sql.driver情况3 中kafka:java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Cal…

线程异步处理任务

实际开发中,service层可能会执行多个步骤,那有些步骤可能和主任务没有太大关联,那我们可以采用线程去处理,这样就提高响应速度,当然也可以采用MQ,此处介绍的是用线程处理 1、controller层@GetMapping("/thread")public void thread(){demo1Service.process();}…

08. 通用定时器

一、什么是通用定时器ESP32 S3 芯片配备了两个通用定时器组,每组均包含两个通用定时器和一个主系统看门狗定时器。每个通用定时器都具备多个通道。通过明确指定定时器号和通道号,用户可以精准地选定所需的定时器和通道。每个定时器均支持独立编程,并且具备微秒级的精确时间中…

全链路赋能游戏鸿蒙化适配,鸿蒙游戏开发者服务焕新升级

3月14日,华为游戏中心在成都开展了鸿蒙游戏开发者服务日线下活动。本次活动吸引了百余位游戏厂商代表以及开发者参与。华为一线技术专家团队与众多游戏开发者进行了面对面的深入交流,聚焦游戏鸿蒙化全流程技术实践,通过专家授课、案例解析与现场互动,为开发者提供从技术适配…

多线程程序设计(三)——Guarded Suspension

本文摘要了《Java多线程设计模式》一书中提及的 Guarded Suspension 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当线程访问的共享数据没有准备好时,让该线程进入等待状态,直到数据被准备好…

西部数据企业级硬盘HC310开盘数据恢复,300G左右数据量耗时半年

这块西数4T企业级硬盘HC310是杭州某研究所送过来的,突发损坏不识别,通电后咯吱咯吱敲盘异响,磁头坏了。这款企业级硬盘目前开盘成功率一般,因为磁头适配很困难,需要反复更换磁头,备件成本很高。这种硬盘的开盘难度跟服务器SCSI或SAS硬盘有的一拼,没有经验甚至拆一个废一…

5分钟,构建国产数据库智能体

近期,圈里很多朋友,都尝试利用 DeepSeek 构建自己的智能体。我也利用腾讯元器,将个人公众号内容做了个智能体,可以实现简单的问答。那么延展来看,智能体除了可利用公众号内容,也可使用离线文件等方式来构建。这不禁让我考虑,是否可用这样方式构造一个数据库智能体。说干…

Ubuntu 22.04 LTS 基于 Docker 部署 WordPress

Ubuntu 22.04 LTS 基于 Docker 部署 WordPress 1. 引言 WordPress 是全球最受欢迎的内容管理系统 (CMS),使用 Docker 可以简化其部署过程。本教程将介绍如何在 Ubuntu 22.04 LTS 上使用 Docker 部署 WordPress。2. WordPress 简介 2.1 WordPress 是什么? WordPress 是全球最流…

7.接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示…

K近邻算法等

1. KNN算法和KD - tree总结 1.1 KNN算法 模型 K近邻(K - Nearest Neighbors,KNN)算法是一种基本的分类与回归方法。它的模型实际上是对特征空间的划分,给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的 \(K\) 个实例,然后根据这 \(K\) 个实例的…

正则表达式--java进阶day06

1.正则表达式2.正则表达式的规则、使用3.字符类讲解如图,单独一个a满足正则表达式的规则,所以返回true当删去[]后,正则表达式中的规则就会变为必须是abc,否则不满足条件,即使有一个a该规则是指a-d或者m-p,可以写成[a-dm-p]4.预定义字符类注意事项 正则表达式中存在数量问…