flex学习 - 用户可用的值和yacc接口

news/2025/3/15 22:12:02/文章来源:https://www.cnblogs.com/xiaobing3314/p/18774275

第十二章用户可用的值
这个章节概述了一些在规则动作中对用户有效的值。
char *yytext
持有当前标记的文本。它可以被修改,但是不能被加长(不能在末尾添加字符)。
如果专门的指令%array出现在扫描器描述的第一部分,那么yytext将被声明为char yytext[YYLMAX],这里的YYLMAX是一个宏定义,如果你不喜欢默认值(通常为8KB),可以在第一部分中重新定义。使用%array会导致扫描器的速度变慢,但是yytext的值不受调用unput()的影响,当yytext是字符指针时,调用unput()可能会破坏它的值。与%array相对的是%pointer,这是默认值。
当产生C++扫描器类(‘-+’标志)时不可以使用%array。
int yyleng
持有当前标记的长度
FILE *yyin
默认情况下flex从yyin读取文件。它可以被重新定义,但这样做只有在扫描开始之前或遇到EOF之后才有意义。在扫描过程中改变它会产生意想不到的后果,因为flex缓冲了它的输入;请使用yyrestart()替代。一旦扫描因为看到文件结束而终止,就可以在新的输入文件上赋值yyin,然后再次调用扫描器继续扫描。
void yyrestart(FILE *new_file)
可以被调用让yyin指向新的输入文件。切换到新文件是立即的(任何先前缓冲的输入都将丢失)。请注意,使用yyin作为参数调用yyrestart()会丢弃当前的输入缓冲区,并继续扫描相同的输入文件。
FILE *yyout
是执行ECHO操作的文件。它可以由用户重新分配。
YY_CURRENT_BUFFER
返回当前缓冲区的YY_BUFFER_STATE句柄
YY_START
返回对应当前开始条件的整数值。随后,你可以将此值与BEGIN一起使用以返回到之前的开始条件。
第十三章YACC接口
flex的主要用途之一是作为yacc解析器生成器的伙伴。yacc解析器期望调用名为yylex()的函数来查找下一个输入标记。函数应该返回下一个标记的类型,并将任何相关的值放入到全局变量yylval中。要将flex和yacc一起使用,可以为yacc指定’-d’选项,指示它生成文件y.tab.h,其中包含yacc输入中出现的所有%token的定义。然后将该文件包含在flex扫描器中。例如,如果由一个标记是TOK_NUMBER,扫描器的部分看起来是这样的:
%{
#include "y.tab.h"
%}

%%[0-9]+        yylval = atoi( yytext ); return TOK_NUMBER;

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

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

相关文章

鸿蒙特效教程02-微信语音录制动画效果实现教程

鸿蒙特效教程02-微信语音录制动画效果实现教程本教程适合HarmonyOS初学者,通过简单到复杂的步骤,一步步实现类似微信APP中的语音录制动画效果。最终效果预览 我们将实现以下功能:长按"按住说话"按钮:显示录音界面和声波动画 录音过程中显示实时时长 手指上滑:取…

SpringBoot使用Kafka生产者、消费者

SpringBoot使用Kafka生产者、消费者@目录依赖配置文件生产者消费者 依赖 <!--kafka--> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>xxx</version> </depend…

jasperreport 使用和问题记录

引言:之前一直没有记录的习惯,所以在这里记录有些是回忆,所以可能有些不连贯.而且本人的问题不一定是你的问题,仅作参考. (注:本人是使用java生成pdf文件) 1.介绍(只介绍自己用的到) 进入软件 File->new->jasper report->blank A4 我们得到了一张A4纸,如下图所示.(注:…

Java学习四大名著:《Java核心技术 卷II:高级特性(原书第12版)》 | PDF免费下载

《Java核心技术 卷II:高级特性(原书第12版)》是Java学习的经典书籍,该书深入探讨了 Java 语言的高级功能,涵盖流与文件处理、并发编程、网络、数据库、JVM 调优等关键主题。适合有一定基础的开发者,帮助他们掌握高效编程技巧,优化性能,并深入理解 Java 生态系统,是进阶…

STM32CubeIDE 下载与安装教程(以 1.18.0 版本为例)

STM32CubeIDE 下载与安装教程(以 1.18.0 版本为例) 软件介绍 STM32CubeIDE 是 STMicroelectronics 提供的官方集成开发环境(IDE),专为 STM32 微控制器系列设计。它融合了 STM32CubeMX 和 Eclipse 的强大功能,提供了一个完整的开发环境,适用于嵌入式软件开发和调试。STM3…

【作业3】结对项目:实现一个自动生成小学四则运算题目的命令行程序

⭐成员:3223004473詹艺珏 and 3223004301吴梦琪 📎Github链接:https://github.com/Jue610/Jue610/tree/main/ArithProbelm这个作业属于哪个课程 23软件工程这个作业要求在哪里 【作业3】结对项目这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序,培养团…

用ESP32做一个遥控机械臂

RC汽车机械臂只是一个有轮子的RC汽车。该机械臂是一个四自由度机械臂,这意味着它有四个运动部件。我使用mg90伺服电机,因为它们是金属的,但塑料sg90也应该工作。如下图所示。我使用了两个独立的电源,每个都由2S锂离子(Li-on)电池组成,一个用于MCU,另一个用于电机。这是为…

最小化安装Ubuntu

最小化安装 前言: 有时候需要搭建虚拟机,每一次都需要去找文章,搞小半天才能完成环境搭建 这一次写一篇文章记录一下,目的是以后能比较快速简单的搭建好环境 概要 最小化安装需要手动启用网卡 安装防火墙 ⇒ 打开某些端口确保ssh连接等 安装openssh-server openssh-client ⇒ …

愤怒的小鸟

Day 2025/2/20愤怒的小鸟剪切精灵图-改sprite mode为mutiple在sprite editor中slice设置弹弓与鸟的层级关系layer-player 鸟加springjoint组件-distance-0.3-autodistance关闭弹弓组件的一些基本属性:Distance:两点之间的固定距离(设定完有剩余的距离就是可拉伸的长度)Freq…

通过振动传感器,触发水的运动并将其转换为声音

“微挑战”是在巴塞罗那IAAC的“紧急未来设计硕士”课程中为期一周的工作坊。在这一周,我们有时间、空间和专业人士的支持来创建一个功能原型,它也可以是一个投机性的人工制品,有助于我们的个人研究和实践。这个原型应该基于迭代和使用:数字制造工具、生物制造、人工智能、…

单链表练习与重下AS

1.练习题:我的代码答案: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* reverseList(struct ListNode* head) {struct ListNode dummpy;struct ListNode* tmp;dummpy.next=NULL;//引入临时…

pycharm连接autodl服务器

昨天听舍友说,他们第一个实验都跑完了,瞬间焦虑起来,原来落后这么多,完事昨天晚上7点开始看教程,配环境,看了好几个教程,每个教程都不一样竟然!然后问舍友,舍友说:你先知道你要跑什么项目,我说:我知道啊,我要做什么项目,想要什么结果,我都知道,项目和代码都有,…