作者:胡彦本框架是一个lex/yacc完整的示例,用于学习lex/yacc程序基本的搭建方法,在linux/cygwin下敲入make就可以编译和执行。
本例子虽小却演示了lex/yacc程序最常见和重要的特征:*lex/yacc文件格式、程序结构。
*如何在lex/yacc中使用C++和STL库,用extern"C"声明那些lex/yacc生成的、要链接的C函数,如yylex(),yywrap(),yyerror()。
*重定义YYSTYPE/yylval为复杂类型。
*用%token方式声明yacc记号。
*用%type方式声明非终结符的类型。
*lex里正则表达式的定义、识别方式。
*lex里用yylval向yacc返回属性值。
*在yacc嵌入的C代码动作里,对记号属性($1,$2等)、和非终结符属性($$)的正确引用方法。
*对yyin/yyout重赋值,以改变yacc默认的输入/输出目标。
*如何开始解析(yyparse函数),结束或继续解析(yywrap函数)。
本例子功能是,对当前目录下的file.txt文件,解析出其中的标识符、数字、其它符号,显示在屏幕上。
linux调试环境是Ubuntu10.04。
总之,大部分框架已经搭好了,你只要稍加扩展就可以成为一个计算器之类的程序,用于《编译原理》的课程设计。
文件列表:lex.l:lex程序文件。
yacc.y:yacc程序文件。
main.hpp:共同使用的头文件。
Makefile:makefile文件。
file.txt:给程序解析的文本文件。
使用方法:1-把lex_yacc_example.rar解压到linux/cygwin下。
2-命令行进入lex_yacc_example目录。
3-敲入make,这时会自动执行以下操作:(1)自动调用flex编译.l文件,生成lex.yy.c文件。
(2)自动调用bison编译.y文件,生成yacc.tab.c和yacc.tab.h文件。
(3)自动调用g++编译、链接出可执行文件main。
(4)自动执行main,得到如下结果:。
bison-dyacc.yg++-clex.yy.cg++-cyacc.tab.cg++lex.yy.oyacc.tab.o-omainid:abcid:defghiint:123int:45678op:!op:@op:#op:$AllId:abcdefghi参考资料:《Lex和Yacc从入门到精通(6)-解析C-C++包含文件》,http://blog.csdn.net/pandaxcl/article/details/1321552其它文章和代码请留意我的blog:http://blog.csdn.net/huyansoft2013-4-27
1
HTML5、CSS3使用标准语言编写,支持IE10以上浏览器响应式在桌面、平板、手机端均以最佳状态显示回复下载可强制要求用户评论文章后才提供下载地址内容回复可见指定某些内容需要读者评论后才可查看,让读者与你互动(可设置为要求用户注册登录并评论后才显示某些内容)侧边栏小工具边栏数量可自定义、完全使用WP官方的小工具模型,开发了更多适合本主题的小工具语音朗读使用百度语音合成技术来为您阅读文章评论表情本主题自带评论表情功能,无需插件在后台即可设置瀑布流文章列表可选择卡片或列表排序,其中卡片又可设置为普通或瀑布流形式不刷新加载全局提供ajax加载文章打赏允许通过多种途径打赏,如:支付宝二维码、微信二维码、Paypal链接点赞每篇文章均提供点赞功能,可展示访客最喜欢的文章列表(后台可以修改点赞数据)生成封面二维码每篇文章均可生成二维码用于分享到微信等社交平台
1
自绘listctrl类,实现列表控件的行高修改,背景颜色的设置,及表头的相关修改,大家可以好好学习下,挺有帮助的
2023/8/1 17:54:19 56KB 修改行高
1
一个模拟http401Digest认证的登录海康NVR抓取摄像头列表的小demo
2023/8/1 10:29:17 24KB http 401 digest 爬虫
1
c#实现FTP服务器,功能①、按标准FTP协议登录FTP服务器,进行身份验证;
②、显示远程目录、文件列表,进行目录切换;
③、目录、文件列表的排序显示(文件名、时间、类型);
④、能上传文件、下载、删除文件;
⑤、支持设置选择二进制、文本格式文件传输(UNIX标准的文本);
2023/8/1 9:02:34 465KB FTP 服务器
1
Algorithm_Note:bookmark_tabs:目录:white_medium_star:Leetcode刷题笔记已解决译文列表:ID译文语言题解链接1个两数之和C++7整体反转Java9回文数Java13罗马数字转数字Java14最高公共预算Java20有效的括号Java21合并两个有序链表Java26删除排序中的重复项Java27可拆卸元素Java35搜索插入位置Java38报数Java50战俘(x,n)Python38报数Java53最大子序和Java54顺时针打印矩阵Python58最后一个单词的长度Java66加一Java67二进制求和Java69x的平方根Java70爬楼梯Java79单词搜索Python83删除排序链表中的重复元素Java88合并两个有序时序Java100相同的树Java101对称二叉树Java102二叉树的层次遍历Python105根据前序和中序重建二叉
2023/7/31 23:55:37 142.27MB algorithm leetcode AlgorithmC++
1
五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。
主要完成了人机对战和玩家之间联网对战2个功能。
网络连接部分为Socket编程应用,客户端和服务器端的交互用ClassMessage定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。
服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。
在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。
分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。
算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用
2023/7/31 6:20:30 1.34MB java 五子棋 毕业论文
1
android列表三级联动android列表三级联动android列表三级联动android列表三级联动android列表三级联动android列表三级联动android列表三级联动
2023/7/31 2:55:12 13.94MB android 三级联动
1
(1)按规则拼单词,并转换成二元式形式(2)删除注释行(3)删除空白符(空格、回车符、制表符)(4)列表打印源程序,按照源程序的行打印,在每行的前面加上行号,并且打印出每行包含的记号的二元形式(5)发现并定位错误
2023/7/31 2:14:17 3KB 词法分析器 c语言 源代码
1
1.推荐使用组件卸载方式,也可以使用Windows的控制面板正常卸载,如果正常卸载不干净,可以用本工具做强制删除!2.在非正常卸载无法使用的情况下亦可直接使用强制删除模式!直至本卸载列表为空!3.支持Win2003/2008/2012服务器版本,以及WinXP/7/8/10等桌面系列。
2023/7/30 17:39:49 989KB 卸载工具 数据库 SQL server
1
共 1000 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡