




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
塔里木大学-信息工程学院 编译原理实验编译原理结课论文题目: 词法分析器 学号: 作者: 班级: 电话: Email: 教师: 递交日期: 年 月 日目录摘要3涉及知识点31. 输入、预处理32.单词符号的识别状态转换图33.利用状态转换图识别单词(Token)的步骤3涉及技能点3正文4一、基本定义4二、主要特点4三、功能分析4四、系统分析5五、系统说明51.关键字52.运算符53.界符54.其他标记55.运行结果在屏幕上的显示56.测试功能的问题57.C关键字表5六、词法分析器源代码6七、运行结果截图及分析8参考文献9摘要一个高级语言程序的实现,必须依赖于相应的编译系统。编译程序的基本任务是将源语言程序翻译成等价的目标语言程序。词法分析是编译过程的第一个阶段,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以后续的语法分析。该系统采用C+开发,设计并实现C/C+语言词法分析器的基本功能,即读入C/C+语言源程序,输出单词符号,并进行相应的出错处理。 关键词:编译程序; 词法分析涉及知识点1. 输入、预处理词法分析器工作的第一步是输入源程序文本。输入串一般是放在一个缓冲区中,这个缓冲区称输入缓冲区。词法分析的工作可以直接在这个缓冲区中进行。但在很多情况下,把输入串预处理一下,对单词符号的识别工作将是比较方便的。对于许多程序语言来说,空白符、跳格符、回车符和换行符等编辑性字符除了出现在文字常数中之外,在别处的任何出现都没有意义。对于它们,预处理时可以将其剔掉。每当词法分析器调用它时,它就处理出一串确定长度的输入字符,并将其装进词法分析器所指定的缓冲区中(称为扫描缓冲区)。这样,分析器就可以在此缓冲区中直接进行单词符号的识别,而不必照管其它繁琐事务。分析器对扫描缓冲区进行扫描时一般用两个指示器,一个指向当前正在识别的单词的开始位置(指向新单词的首字符),另一个用于向前搜索以寻找单词的终点。2.单词符号的识别状态转换图使用状态转换图是设计词法分析器的一种好途径。转换图是一张有限方向图(有向图)。在状态转换图中,结点代表状态,用圆圈表示。状态之间用箭弧连接。箭弧上的标记(字符)代表在射出结点(即箭弧始结点)状态下可能出现的输入字符或字符类。3.利用状态转换图识别单词(Token)的步骤1. 从初态出发2. 读入一字符3. 按当前字符转入下一状态4. 重复 2,3 直到无法继续转移涉及技能点方法1:把词法分析安排成独立的一遍,让它把整个源程序翻译成一连串的单词符号存放于文件中。待语法分析器进入工作是在对从文件输进的这些单词符号进行分析。这种做法意味着必须在文件中保存整个源程序的内码形式。方法2:把词法分析器安排成一个子程序,每当语法分析器需要一个单词符号时就调用这个子程序。每一次调用,词法分析器就从输入串中识别出一个单词符号,把它交给语法分析器。这样,把词法分析器安排成一个子程序就比较自然。正文一、基本定义词法分析器又称扫描器。词法分析是指将我们编写的文本代码流解析为一个一个的记号,分析得到的记号以供后续语法分析使用。词法分析器的工作是低级别的分析:将字符或者字符序列转化成记号.。在谈论词法分析时,使用术语“词法记号”(简称记号)、“模式”和“词法单元”表示特定的含义。在分析时,一是把词法分析器当成语法分析的一部分,另一种是把词法分析器当成编译程序的独立部分。在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其Token值返回给语法分析器。后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。二、主要特点词法分析器主要特点是不依靠语法,而只依靠词法,即处理一个单词时不依赖于外部单词的信息,因此词法分析器一般都很简单。当然,对某些语言在作词法分析时,在有些情况下不得不往前查看多个字符,有时还要做一些特殊处理,还有一些在词法分析中处理不了的,要留到语法分析中进行处理。本算法主要利用状态转换图生成一个词法分析器,对输入的程序进行词法分析,并将分析得到的单词造表。其中关键字表和界限符表的大小是由高级语言的子集决定的,可以用数组装载;而标识符表和常数表的大小取决于输入的待分析程序中的变量、过程名、常数的个数,所以要用指针组成动态链表来装载。当然为了方便,我们也把它定义成数组处理。语法分析时,调用词法分析器,根据已知文法利用递归向下分析,检查语法错误。三、功能分析编写词法分析器,词法分析器能够识别关系算符,词法分析器能够识别标识符和关键字,词法分析器能够识别无符号数。编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析器。词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的二元式 (单词种别码,单词符号的属性值)表示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示,设计一个词法分析程序,理解词法分析器实现的原理,掌握程序设计语言中的各类单词的词法分析方法,加深对词法分析原理的理解。本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示)。实现的关键技术:双缓冲区设计、识别单词的状态转换图等,符号表的组织与实现也是不容忽视的一项关键技术。四、系统分析输入:待处理的C语言程序路径,输出文件的路径输出:输出文件格式:上半部分:数字含义说明符;下半部分:二维表,第一列是数字表示的字符说明符,第二列是需要特别说明的属性。说明:1.main函数负责打开关闭文件,及调用词法分析器函数; 2.程序起始声明了一系列辅助函数调用,避免重复作业; 3.该程序为简化版,处理了以下单词:关键字(32个)、标识符、数字(只处理不含小数的数字)、字符串(双引号之间的字符,且只处理256字节内的字符串)、所有运算符、未知字符; 4.该程序输出运算符未转化为数字,而是直接输出。五、系统说明1.关键字begin,end,if,then,else,while,write,read,do,call,const,char,until,procedure,repeat2.运算符+,-,*,/,=3.界符,;,.,(,),:4.其他标记如字符串,表示以字母开头的标识符;.空格、回车、换行符跳过5.运行结果在屏幕上的显示1 $无符号整数begin $关键字 if $关键字 + $运算符 ; $界符 a $普通标识符 /“$“为美元符号,不是大写字母S6.测试功能的问题可以多次设置包含不同字符,关键字的待解析文件,但要保证输入文件和后缀名时准确无误,仔细察看运行结果,检测该分析器的分析结果是否正确。7.C关键字表defineiostreamintstringendbreakelserepeatswitchbegincasemaxkeycomparethencharcoutreturnanalysewriteconstfpinfgetcfseekreadmainforfopenvoidcalldefaultinfclosewhileuntilDoifstaticnull procedure六、词法分析器源代码#include #includeusing namespace std;#define MAX 22 char ch = ;string key15=begin,end,if,then,else,while,write,read,do, call,const,char,until,procedure,repeat;/字符串键 15 = “开始”,“结束”,“如果”,“当时”,“其他”,“当”,“写”,“读”,“做”,“访问”,“常量”,“字符”,“直到”,“程序”,“重复”;int Iskey(string c) /关键字判断 int i; for(i=0;iMAX;i+) if(pare(c)=0) return 1; /将i作比较,返回1 return 0;int IsLetter(char c) /判断是否为字母 if(c=a)|(c=A) return 1; else return 0;int IsDigit(char c) /判断是否为数字 if(c=0&c=9) return 1; else return 0;void analyse(FILE *fpin) /无效的分析(文件及外地个人识别号) string arr=; while(ch=fgetc(fpin)!=EOF) /赋值 arr=; if(ch= |ch=t|ch=n) else if(IsLetter(ch) while(IsLetter(ch)|IsDigit(ch) if(ch=A) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)coutarrt$关键字endl; else coutarrt$普通标识符endl; else if(IsDigit(ch) while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); coutarrt$无符号实数endl; else switch(ch) /标识符分类识别 case+: case- : case* : case/ :coutcht$运算符endl;break;case= : case( : case) : case : case : case :case :coutcht$界符endl;break;case; : case, :case: :ch=fgetc(fpin); if(ch=) cout:=t$运算符endl; else cout=t$运算符endl; fseek(fpin,-1L,SEEK_CUR); break;case. : case :ch=fgetc(fpin); if(ch=)cout=t$运算符endl; else if(ch=)coutt$输出控制符) coutt$运算符endl; elsecoutt$运算符 :ch=fgetc(fpin); if(ch=) cout=t$运算符)coutt$输入控制符endl; else coutt$运算符endl; fseek(fpin,-1L,SEEK_CUR); break;default : coutcht$无法识别字符endl; void main() char in_fn30; FILE * fpin; coutin_fn; if(fpin=fopen(in_fn,r)!=NULL) break; else cout该文件路径错误!请输入要查询的源文件名(包括路径和后缀名):; coutn*查询结果分析如下*endl; analyse(fpin); fclose(fpin); coutendl; cout按任意键结束a;七、运行结果截图及分析说明:在电脑D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美术教师专业素养与教学能力提升培训
- 课程策划培训
- 客服主管培训
- 喷绒工艺流程图
- 培训成果总结汇报
- 进修教师培训开班仪式
- 合作协议合同简单模板:美甲店专用
- 国际贸易合同签订与履行实训报告
- 公共设施装饰工程合同
- 设备租赁合同版
- 第十二讲 建设社会主义生态文明PPT习概论2023优化版教学课件
- 工商管理实习周记十篇
- 幼儿园体育游戏活动评价表
- 2023年通管局安全员考试-培训及考试题库(导出版)
- GB/T 4857.22-1998包装运输包装件单元货物稳定性试验方法
- GB/T 25074-2010太阳能级多晶硅
- GB/T 23842-2009无机化工产品中硅含量测定通用方法还原硅钼酸盐分光光度法
- GA/T 1217-2015光纤振动入侵探测器技术要求
- 特种陶瓷介绍课件
- 有机物污染(环境化学)课件
- 安全生产培训合格证书样本
评论
0/150
提交评论