版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、集美大学实验报告班级 :姓名 :学号 :课程名称:编译原理指导教师:实验项目编号:实验三实验项目名称:词法分析器的设计实验成绩:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。 并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分 析方法。二、实验内容编写一个词法分析器,从输入的源程序(编写的语言为C语言的一个子集)中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error ”,然后跳过错误部分继续显示)1、 词法分析器的功能和输出格式词法分析器的功能是输入源
2、程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式( 单词种别码,单词符号的属性值) 。单词示例单词种别码要求保留字if、 else、int、 while 、 do每个保留字的单词种别都 单独为一种标识符以字母开头且包含字母和数 字的字符串标识符作为一种常数 (只识别无符号 整数)123、 343无符号整数作为一种运算符+、 -、 *、 /、 =、 = = 、 !=、 、=、 、 、4分隔符,、 ;、 、 、 (、 )5本实验所使用的开发语言是C语言, 在 Test2 类中定义了以下几个函数:开始Nerror=ture ?Yerror=ture?check=false?check=
3、false?YNcheck=turech 是运算符?check=ture ? NCh 是字母?输出str,标识为运算符Y2. 程序流程图:NYerror=false输出str, 标识为标示符check=tureN输出 str,标识为无法N识别的串check=ture,Y输出str,标识为标示符 check=tureYch 加到 str 中NYN读入文件,把内容存入string 中,m=0, check=ture, error=false输出str,标识为无法Y 识别的串check=ture ,error=false从 string 中读出一个字符放入ch 中清空str, ch 加到str 中,
4、 check=false输出 str,标识为分隔符打印出错清空str, ch 加到str 中, check=falsech 加到str 中Y#include#include#include#include/判断读入的字符是否为字母bool isLetter(char c)if(c = a & c = A & c =0 & c = 9) return true;elsereturn false;/判断是否为关键字bool isKey(char *string) if(!strcmp(string,void)| !strcmp(string,if)| !strcmp(string,for)| !s
5、trcmp(string,while)| !strcmp(string,do)| !strcmp(string,return)| !strcmp(string,break)| !strcmp(string,main)| !strcmp(string,int)| !strcmp(string,float)| !st rcmp(string,char)| !strcmp(string,double)| !strcmp(string,String)return true;else return false;bool isError(char ch)if(ch = | ch = $ | ch = &
6、| ch = # | ch = | ch = )return true;elsereturn false;void main()char string500=;/存放文件中读出来的字符串char str10=;/存放需要对比的字符串char ch,c;/ch存放文件中的单个字符(翻译时用),c存放文件中的单个字符(从文件中提取信息时用)char filename20;/文件名int j=0;printf( 请输入文件名进行词法翻译:);scanf(%s,filename);FILE *cfPtr;if(cfPtr=fopen(filename,r)=NULL)printf( 文件未找到!);e
7、lsewhile(!feof(cfPtr)if(isspace(c=fgetc(cfPtr)/判断是否是字符串/;elsestringj=c;/从文件中一一提取字符j+;int m = 0,k=0;/m 翻译时用,k 是 str数组的下标stringj= ;j+;bool check=true,error=false;/用于判断标识/for(int i = 0;i | ch = ) if(error)printf(%s, 此字符无法是识别!n,str);error=false;check=true;else if(!check)printf(2,%s) 标示符 n,str);check=tru
8、e;m = 4;else if(ch = , | ch = ; | ch = | ch = | ch = ( | ch =)if(error)printf(%s 此字符无法识别n,str);error=false;check=true;else if(!check)printf(2,%s) 标示符 n,str);check=true;m = 5;else if ( isDigit(ch =stringi) ) )if(check)memset(str, 0, strlen(str);/清空/k=0;strk=ch;k+;m = 3;check=false; elsestrk=ch;k+;els
9、e if ( isLetter(ch = stringi) )if(check)check=false;memset(str, 0, strlen(str);k=0;strk=ch;k+;elsestrk=ch;k+;if(isKey(str)printf(1,%s) 关键字 n,str); check=true;else if(isError(ch = stringi)if(check)memset(str, 0, strlen(str);/清空/k=0;strk=ch;k+;check=false;error=true;elsestrk=ch;k+;error=true;elsebreak
10、;case 3:if(isLetter(ch =stringi)printf( 程序有错误!n);strk = ch;k+;error=true;m = 0;break;if(isError(ch = stringi)printf( 程序有错误!n);strk = ch;k+;error=true;m = 0;break;if (isDigit(ch =stringi ) )strk = ch;k+;else if(ch=.)strk=ch;k+;elseprintf( 3 , %s) 数字 n,str);i -;m = 0;check=true;break;i-;printf( 4 , %c) 运算符 n,ch);m = 0;break;i -;printf( 5 , %c) 分隔符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未来五年城市园林绿化服务企业ESG实践与创新战略分析研究报告
- 未来五年电子薄型载带企业ESG实践与创新战略分析研究报告
- 未来五年蛇毒制品企业县域市场拓展与下沉战略分析研究报告
- 项目技术交底标准模板
- 2024年职业健康检查标准汇编
- 气候预测中的排列组合优化-洞察及研究
- 高效屏蔽双绞线工艺优化-洞察及研究
- 面向对象软件的安全性优化与模块化架构设计-洞察及研究
- 电子元件回收与再利用研究-洞察及研究
- 高原地貌形成机制-洞察及研究
- 国家自然基金形式审查培训
- 2026马年卡通特色期末评语(45条)
- NCCN临床实践指南:肝细胞癌(2025.v1)
- 免租使用协议书
- 2025 AHA心肺复苏与心血管急救指南
- 2026年九江职业大学单招职业适应性测试题库带答案详解
- 危化品库区风险动态评估-洞察与解读
- 激光焊接技术规范
- 消防联动排烟天窗施工方案
- 2025年高考物理 微专题十 微元法(讲义)(解析版)
- 2025年国家能源投资集团有限责任公司校园招聘笔试备考题库含答案详解(新)
评论
0/150
提交评论