Lex和Yacc从入门到精通熊春雷Abstract在开发程序的过程中经常会遇到文本解析的问题,例如:解析C语言源程序,编写脚本引擎等等,解决这种文本解析的方法有很多,一种方法就是自己手动用C或者C++直接编写解析程序,这对于简单格式的文本信息来说,不会是什么问题,但是对于稍微复杂一点的文本信息的解析来说,手工编写解析器将会是一件漫长痛苦而容易出错的事情。
本系列文档就是专门用来由浅入深的介绍两个有名的Unix工具Lex和Yacc,并会一步一步的详细解释如何用这两个工具来实现我们想要的任何功能的解析程序,为了方便理解和应用,我会在该系列的文章中尽可能的采用具体可行的实例来加以阐释,而且这种实例都是尽可能的和具体的系统平台无关的,因此我采用命令行程序作为我们的解析程序的最终结果。
1、环境配置篇开发Lex和Yacc程序最需要的程序就是lex和yacc了,如果你是Unix或者Linux系统,则系统自带了这两个工具,无需安装,不过值得说明的是GNU/Linux下面的Lex是flex,而Yacc则是bison。
另外需要的就是一个C/C++语言编译器,由于我们采用的是GNU的lex和yacc,所以,理所当然的我们就使用GNU的编译器了,如果是Unix或者Linux系统,那么编译器应该已经安装了。
在这里我重点讨论的是Windows系统环境下的Lex和Yacc程序的开发,至于为什么选择Windows系统作为开发平台,则是为了尽可能的让初学者容易入门。
1.1.必备工具言归正传,首先列举Windows平台下面Lex和Yacc开发环境所需要安装的程序:1.Lex(flex.exe)和Yacc(bison.exe)环境2.C/C++编译器1.2.flex和bison值得说明的是,flex.exe和bison.exe是UnxUtils包中的文件,已经将许多Unix/Linux平台的程序都移植到了Windows平台,可以直接到UnxUtils网站下载,下载解压缩之后在系统的PATH环境变量中增加UnxUtils所有的exe文件所在的目录,使得DOS命令行可以直接搜索到flex.exe和bison.exe,除此之外还需要从网络上下载bison需要的bison.simple和bison.hairy两个文件,并且还要分别设置环境变量BISON_HAIRY指向bison.hairy,BISON_SIMPLE指向bison.simple。
Tip如果觉得麻烦也可以直接使用我做好的flex和bison环境,点击这里下载。
解压缩lexyacc.rar之后运行里面的lexyacc.bat文件就会得到一个lex和yacc环境,下图是简单的运行结果:
2026/1/1 15:30:16 1.51MB lex yacc 编译原理
1
开源一个我自己修改了好几天的一个更合适大家的原理图版本有RS232NRF24L01SRAM内存SPI接口W25X16ADCDAC等等。
2026/1/1 10:09:03 162KB STM32 VET6原理图 PCB
1
我自己实现了一个可以拖出,拖入的自定义选项卡窗口类——CustomTabWidget。
此demo主要通过QTabBar和QStackedWidget来实现QTabWidget的基本功能。
CustomTabBar继承QTabBar,重载了鼠标事件和拖拽实现,来实现标签页拖出的功能。
2026/1/1 7:34:39 5KB c++ qt5
1
本书介绍了CUDA编程的核心知识,始于运行CUDA样例程序,快速引导读者构建自己的代码。
书中配备的实践项目用以加深和巩固对CUDA编程的理解。
2026/1/1 7:07:01 29.27MB CUDA GPU 机器学习 并行计算
1
利用vasp工具计算石墨烯的能带结构,态密度,以及自选密度分布和光学性质。
这篇笔记是自己在写毕业论文时跟着师哥师姐在学校集群上做计算时整理的笔记,对vasp计算的原理不太了解,只会这个简单的过程,里面有错误之处,尽情指正,十分感谢。
2025/12/31 21:05:13 1.07MB vasp graphene
1
Cmake最新版本3.20.0-rc1windows版,自己正好用到就下载了,分享出来共大家下载使用
2025/12/31 12:06:42 35.32MB cmake 3.20.0 win10
1
完整的AR人脸库,自己做过实验,很好用,包含表情,光照,遮挡等
2025/12/31 11:47:35 21.03MB AR人脸库
1
《计算机网络与通信》课程讲述计算机网络的原理,尤其是TCP/IP协议栈的原理和应用,是一门理论性、应用性、实践性都比较强的课程。
《计算机网络与通信实习》是学习完《计算机网络与通信》课程后进行的一次全面的综合实习,是本专业实践性重要环节之一。
计算机网络与通信实习是从原理和实践的角度,在计算机上编程模拟实现计算机网络的基本协议。
通过本实习,使我们对计算机网络的原理能有更加深刻的认识和理解,同时进一步锻炼自己的动手能力。
在这次课程设计中,我设计的的是通过编译语言,编程模拟实现数据链路层协议中的停止等协议。
2025/12/31 10:12:49 105KB 计算机网络
1
前端bootstrap框架项目一套,这是我半年web前端bootstrap框架的学习成果,好不好自己可以感觉到
2025/12/31 9:01:16 7.55MB bootstrap
1
《嘟嘟音乐》是我自己写的Android,若有不足之处请大家谅解1.首页实现读取本地Music本地文件夹中的MP3文件然后放进listview里面2.实现了用户的用户的登录注册页面,登录过后用户可以进行自己的信息修改,实现了服务器的数据交互问题3.实现了管理员登录,使用的是与Tomcat服务器进行数据交互验证信息的正确性,我使用的是myeclipse进行布置的服务器信息,此时使用的是SQLserver2008数据库存储的管理员的信息,读取完以后然后返回到管理界面4.在嘟嘟音乐的管理界面,我实现了策划菜单以及卡片式布局来管理普通用户信息,以及用户信息的增删改查。
查询使用的是以UserId或者昵称迷糊查询的方式进行查询的。
5.我使用的SQLserver2008的数据库文件我已经全部导出了,大家可以自行进行导入6.我使用的myeclipse的项目是Servlet进行的验证app管理员信息的邓丽,项目我已经全部导出。
放在压缩包里面7.我使用的是AndroidStudio,我把文件布局截图放在压缩包里面,还有几个需要注意的地方,特别的坑,尤其是大家需要注意build.gridle(app)这里面大家需要注册导包,你并且配置好自己的SDK。
大家还需要注意就是Android的注册文件里面也需要注意,关于一些权限的问题8.哈哈,大概的的就写到这里了,写的不好的地方大家多见谅,我也是在学习阶段,把自己的写的东西给大家贡献出来以供大家参考学习使用。
我还在压缩包里面放置了视频演示的链接信息,大家可以看看。
如果感觉写的不错的话,请好评哦。
2025/12/31 8:18:12 3.83MB Android Stud 嘟嘟音乐 SQLite
1
共 1000 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡