作者:胡彦本框架是一个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
涵盖基本常用的proteus元件仿真符号
2023/7/23 20:41:58 34KB proteus仿真
1
glib-2.58.0-win64-vs2017-v141-sdk10.0.17134.12csdn-tags:glib-2.58.0x64vs2017v141sdk17134glib-2.58.0及其依赖包:bzip2-1.0.6-win64-vc141.zipglib-2.58.0-win64-vc141.ziplibiconv-1.15-win64-vc141.ziplibintl-0.19.8.1-win64-vc141.zippcre-8.42-win64-vc141.zipzlib1-1.2.11-win64-vc141.zip其中:glib依赖libintlpcrezlibintl依赖libiconvpcre依赖bzip2zlibglib的编译方法:1,准备工具:msvc2017,python3,python需要安装meson和ninja,直接pipinstall即可。
2,准备glib:glib需要dirent的支持,否则在编译时会提示无法解析外部符号的错误。
解决方法为:将根目录\build\win32\dirent目录下的二个C文件和一个H文件拷贝到根目录\glib目录下。
3,修改根目录\glib目录下的meson.build文件,字符全是英文半角:glib_sub_headers=files处添加:glib_sub_headers=files('dirent.h',glib_sources=files处添加:glib_sources=files('dirent.c','wdirent.c',打开vs2017的:适用于VS2017的X64本机工具命令提示:或者call"C:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat"amd64假设python安装在D:\platform\python3则,Scripts目录一定要添加,否则meson.py会找不到:setPYTHONPATH=D:\platform\python3setPATH=%PATH%;%PYTHONPATH%;%PYTHONPATH%\Scripts\然后,创建编译目录,meson用一个新的目录编译源码:mkdirglib-2.58.0-win64-vc141cdglib-2.58.0-win64-vc141meson.py..\glib-2.58.0--prefix=D:\platform\glib--buildtype=minsizeninjaninjainstall就可以完美编译。
欢迎朋友们下载使用。
2023/7/21 15:49:14 9.76MB glib-2.58.0 vs2017v141 sdk17134
1
AMESim表示工程系统仿真高级建模环境(AdvancedModelingEnvironmentforperformingSimulationsofengineeringsystems).基于直接图形接口,在整个仿真过程中系统可以显示在环境中。
AMESim使用图标符号代表各种系统的元件,这些图标符号要么是国际标准组织如工程领域的ISO为液压元部件确定的标准符号,或为控制系统确定的方块图符号,或者当不存在这样的标准符号时可以为该系统给出一个容易接受的非标准图形特征。
2023/7/20 19:29:30 14.2MB AMESim,液压
1
设计16键盘简易计算器,实现以下功能。
1、4*4键盘输入,用按键输入数和运算符号。
1 2 3 +4 5 6 -7 8 9 *C 0 = ∕2、数码管显示运算过程和结果(十进制数),负号用一个LED灯显示。
3、具有清零和复位功能。
4、具有连续运算功能。
5、具有简易报错和提示功能。
2023/7/20 7:33:24 711KB 简易计算器项目
1
介绍19种典型强度调制方式的符号结构,推导它们在高斯信道、弱湍流信道、中强湍流信道中的误时隙率(SER)模型,并进行了数值仿真。
仿真结果表明:随着信噪比不断增大,各调制方式的SER持续减小并逐渐趋于一致,当SER趋于一致时,对信噪比的要求随湍流强度的增大而增高。
脉冲位置调制(PPM)在三种信道中的SER均为最小;调制阶数较小时,差分幅度PPM的SER最大,调制阶数较大时,开关键控(OOK)的SER最大。
其余调制方式的SER介于OOK、PPM与差分幅度PPM之间,并随着调制阶数的增大出现分层现象。
研究结果对实际激光通信系统的设计具有一定参考价值。
2023/7/18 16:52:28 16.31MB 光通信 强度调制 自由空间 直接检测
1
全套原生苹果IOS系统表情包,PNG格式,解压后使用,包括以下内容:01.表情符号与人物02.动物与自然03.食物与饮料04.活动05.旅行与地点06.物品07.符号08.旗帜可用于各类LOGO或图标
2023/7/14 8:18:13 11.65MB 表情
1
JAVA语言。
暴力破解,4位ASCII码符号(包括数字字母符号)组成的明文。
内含字典生成代码。
2023/7/12 15:22:21 25KB sha256 java
1
压缩包包含中英文版的pdf文件和源代码需要符号文件可以到书中指定位置下载
2023/7/9 2:20:55 54.04MB Windows 高级调试
1
哈夫曼编码(HuffmanCoding),是一种熵编码方式,哈夫曼编码是可变字长编码(VLC)的一种。
Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。
本实验实现了如下功能:(1)产生[0255]范围内均匀分布、正态分布、拉普拉斯分布的三组离散随机整数。
每组数据个数为1920×1080,并对这三组数据分别进行哈夫曼编码和解码。
计算熵和码字的平均码长。
(2)将彩色图像的像素R、G、B值作为独立符号,进行哈夫曼编码和解码,计算熵和码字平均码长。
(3)将彩色图像的像素R、G、B值作为联合符号,进行哈夫曼编码和解码,计算熵和码字的平均码长。
1
共 576 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡