《2022年词法分析器的设计与实现教学文案 .pdf》由会员分享,可在线阅读,更多相关《2022年词法分析器的设计与实现教学文案 .pdf(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、词 法 分 析 器 的 设 计 与实 现名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 13 页 -精品文档收集于网络,如有侵权请联系管理员删除编译原理课程实验报告实验题目:某种简单程序语言的词法分析器的设计与实现专业:计算机科学与技术班级:11060341 学号:11060341 姓名:名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 13 页 -精品文档收集于网络,如有侵权请联系管理员删除实验目的:设计一个词法分析程序,理解词法分析器实现的原理,掌握程序设计语言中的各类单词的词法分析方法,加深对词法分析原理的理解。实验任务:词法分析是从左向右扫描每行源程序的符号,
2、拼成单词,换成统一的二元式(单词 种别,单词符号的属性值)表示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式(单词种别,单词符号的属性值)显示,本程序则是通过对给定程序段 分析后以单词符号和文字提示显示)实验流程:名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 13 页 -精品文档收集于网络,如有侵权请联系管理员删除程序清单:#include#include#includeusing namespace std;int k=0;struct word char name10;int kind;word1000;char key3510=scanf,short,int,
3、long,float,double,char,struct,union,printf,typedef,const,unsigned,signed,extern,register,static,volatile,void,if,else,switch,case,for,do,while,goto,continue,break,default,sizeof,return,include,bool ;bool cmp(char a)int i;for(int k=0;k35;k+)if(strcmp(a,keyk)=0)return 1;return 0;int main()#ifdef LOCAL
4、 freopen(in.txt,r,stdin);freopen(out.txt,w,stdout);#endif int p,q,flag;char a1000,b10,ch;while(gets(a)p=0;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 13 页 -精品文档收集于网络,如有侵权请联系管理员删除 int len=strlen(a);while(p=a&ch=A&ch=a&ch=A&ch=0&ch=0&ch=0&ch=0&at=a&at=A&at=0&ch)p+;ch=ap;if(ch=|ch=)b0=;b1=ch;strcpy(wordk.name,b);wo
5、rdk+.kind=5;ch=a+p;else b0=;strcpy(wordk.name,b);wordk+.kind=5;else if(ch=)p+;ch=ap;if(ch=|ch=)b0=;b1=ch;strcpy(wordk.name,b);wordk+.kind=5;ch=a+p;else b0=;strcpy(wordk.name,b);wordk+.kind=5;else if(ch=!)p+;ch=ap;if(ch=)名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 13 页 -精品文档收集于网络,如有侵权请联系管理员删除 b0=!;b1=;strcpy(word
6、k.name,b);wordk+.kind=5;ch=a+p;else b0=!;strcpy(wordk.name,b);wordk+.kind=5;else if(ch=&)p+;ch=ap;if(ch=&)b0=b1=&;strcpy(wordk.name,b);wordk+.kind=5;ch=a+p;else b0=&;strcpy(wordk.name,b);wordk+.kind=5;else if(ch=|)p+;ch=ap;if(ch=|)b0=b1=|;strcpy(wordk.name,b);wordk+.kind=5;ch=a+p;else 名师资料总结-精品资料欢迎下
7、载-名师精心整理-第 10 页,共 13 页 -精品文档收集于网络,如有侵权请联系管理员删除 b0=|;strcpy(wordk.name,b);wordk+.kind=5;for(int i=0;ik;i+)switch(wordi.kind)case 1:printf(标识符,);break;case 2:printf(常量,);break;case 3:printf(关键字,);break;case 4:printf(界符,);break;case 5:printf(运算符,);break;printf(%s)n,wordi.name);int a1=0,a2=0,a3=0,a4=0,a
8、5=0;for(int i=0;ik;i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 13 页 -精品文档收集于网络,如有侵权请联系管理员删除 if(wordi.kind=1)a1+;else if(wordi.kind=2)a2+;else if(wordi.kind=3)a3+;else if(wordi.kind=4)a4+;else if(wordi.kind=5)a5+;printf(标识符:%dn 常量:%dn 关键字:%dn 界符:%dn 运算符:%dn,a1,a2,a3,a4,a5);return 0;运行结果:名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 13 页 -精品文档收集于网络,如有侵权请联系管理员删除名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 13 页 -