




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
xx大学学生课程设计(论文)题 目:词法分析器分析学 号:姓 名:专业年级:2012级计算机科学与技术教师姓名:2015年 6 月 15日摘 要词法分析的主要任务是对源程序进行扫描,词法分析是编译的第一个阶段,词法分析器工作时从左向右逐个字符地对源程序进行扫描,是语法分析的基础。词法分析器的分析过程调用getsym时,它通过getch过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,sym变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符。关键词:词法分析 标识符abstractlexical analysis is the main task of the source program for scanning, the compiler lexical analysis is the first stage, the lexical analyzer to work each character from left to right to scan the source program, and is the basis of the syntax analysis. the analysis of the lexical analyzer procedure call getsym, it through the getch process from source program one character at a time. if the character is a letter, continues to get characters or numbers, finally can spell a word, check the reserved word table, if find as reserved words, sym variable into corresponding reserved word type value; if not checked, this word should be a user-defined identifier. 【key words】 lexical analysis identifier目 录引 言51.设计思路62.设计意义63.词法分析器的分析73.1 词法分析器的任务73.2设计内容及功能73.3输出74.词法分析器的设计75.程序源代码76.结果分析117.心得体会12参考文献13引 言在网络世界中,我们往往对功能强大的程序叹为观止。而这些强大程序的背后是编译这些程序的编译软件,是这些编译软件承托起了这些功能强大的运行程序。我们有不少的同志致其自身于无尽的运行程序上。而只有很少的人搞编译程序。这就是为什么中国的可运行程序满天飞,而编译程序却很少。本课程设计就是在这方面的探索,为你解读编译程序的奥秘。其中最基本的编译程序就是词法分析器,词法分析是编译过程的基础,这个过程模拟了一台可以运行类pcode指令的栈式计算机。下面就让我们一起走进编译程序的世界,去领悟它的奥秘吧。1.设计思路词法分析是编译的第一个阶段,它的主要任务是从左向右逐个字符地对源程序进行扫描,产生一个个单词序列用于语法分析。pl/0词法分析程序getsym的功能是为语法分析提供单词用的,是语法分析的基础,把输入的字符串形式的源程序分割成一个个单词符号。经过词法分析程序分析出来的单词,对语言固有的单词只给出类别存放在全程变量sym中,而对用户定义的单词(标识符或常数)既给出类别又给值,其类别放在sym中,值放在全程变量id或全程变量num中,全部单词种类由编译程序定义的纯量类型。symbol给出,称为语法词汇表。词法分析器的分析过程:调用getsym时,它通过getch过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把sym变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把sym置为ident,把这个单词存入id变量。查保留字表时使用了二分法查找以提高效率。如果getch获得的字符是数字,则继续用getch获取数字,并把它们拼成一个整数或实数,然后把sym置为integer,并把拼成的数值放入num变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把sym则成相应的类型。如果遇到不合法的字符,把sym置成nul。2.设计意义在学习编译原理课程设计中,结合各章节的构造编译程序的基本理论,实现对源程序的扫描,把整个源程序翻译成一个个单词符号,并存入一外部文件中,语法分析程序再对该文件中的一连串的单词符号进行语法分析。3.词法分析器的分析3.1 词法分析器的任务 词法分析程序的任务是读入源程序,输出单词符号。3.2设计内容及功能 设计各单词的状态转换图,并为不同的单词选择种别码。将词法分析器设计成供语。功能包括:能够拼出语言中的各个单词、将拼出的标识符填入符号表、返回。3.3输出 词法分析器所输出单词符号常常表示成如下的二元式: (单词种别,单词符号的属性值) 单词种别通常用整数编码。标识符一般统归为一种。常数则宜按类型(整、实、布尔等)分种。关键字可将其全体视为一种。运算符可采用一符一种的方法。界符一般用一符一种的方法。对于每个单词符号,除了给出了种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词符号的特性或特征。 4.词法分析器的设计 词法分析器工作的第一步是输入源程序文本。在许多情况下,为了更好地对单词符识别,把输入串预处理一下。预处理主要滤掉空格,跳过注释、换行符等。词法分析的过程当中,有时候为了确定词性,可能需要超前扫描若干个字符。5.程序源代码#include /*定义i/o库所用的某些宏和变量*/ #include /*定义字符串库函数*/ #include /*提供有关屏幕窗口操作函数*/ #include /*分类函数*/ char prog80=0;char token8; /*存放构成单词符号的字符串*/ char ch;int syn; /*存放单词字符的种别码*/ int n; int sum; /*存放整数型单词*/int m,p; /*p是缓冲区prog的指针,m是token的指针*/ char *rwtab6=begin,if,then,while,do,end; void scaner() m=0; sum=0; for(n=0;n8;n+) tokenn=0;ch=progp+; while(ch= ) ch=progp+; if(isalpha(ch) /*ch为字母字符*/ while(isalpha(ch)|isdigit(ch) /*ch 为字母字符或者数字字符*/ tokenm+=ch; ch=progp+; tokenm+=0; ch=progp-;syn=10; for(n=0;n6;n+) if(strcmp(token,rwtabn)=0) /*字符串的比较*/ syn=n+1; break;else if(isdigit(ch) /*ch是数字字符*/ while(isdigit(ch) /*c是数字字符*/ sum=sum*10+ch-0; ch=progp+; ch=progp-; syn=11; else switch(ch) case syn=21; tokenm+=ch;else syn=20; ch=progp-; break;case:m=0;tokenm+=ch;ch=progp+; if(ch=) syn=24; tokenm+=ch; else syn=23; ch=progp-; break;case:m=0;tokenm+=ch;ch=progp+; if(ch=) syn=18; tokenm+=ch;else syn=17; ch=progp-; break;case+:syn=13;token0=ch;break; case-:syn=14;token0=ch;break; case*:syn=15;token0=ch;break; case/:syn=16;token0=ch;break; case):syn=19;token0=ch;break; case=:syn=25;token0=ch;break; case;:syn=26;token0=ch;break; case(:syn=27;token0=ch;break;case:syn=28;token0=ch;break; case:syn=29;token0=ch;break; case:syn=30;token0=ch;break; case:syn=31;token0=ch;break; case#:syn=0;token0=ch;break;default:syn=-1;main() printf(nnthe significance of the figures:n 数字1到6代表关键字n数字10到11代表其他标识n 数字3到31代表操作n)p=0;printf(nplease input string:n); do ch=getchar(); progp+=ch; while(ch!=#);p=0;do scaner(); switch(syn) case 11: printf(%d,%d)n,syn,sum);break; case -1: printf(n error;n);break; default: printf(%d,%s)n,syn,token); while(syn!=0); getch(); 6.结果分析7.心得体会 通过这次课程设计我对编译原理这门课程有了更深刻的认识,把理论知识运用到实践当中我们会发现其中会隐藏着无穷的乐趣,同时也加深了自己对c语言的运用和理解能力。这次课程设计,让我学到了一些东西,让我认识到了编译程序的重要性,但更多的是发现了自己的不足,知识的极度匮乏,让设计的进程变得很缓慢,一些很基本的东西都要通过反复查阅资料来完成,在以后的学习生活当中自己一定要注意把基础打牢,实践离不开理论基础,如果连理论知识都掌握不好的话,实践过程当中基本上是无法进行下去的。同时,我在实验过程当中也认识到了团队的重要性,有的同学这方面可能学的好一点,另一些同学另一方面学的牢固一点,把每个人的优势结合起来,会很有效的加快实验的进度。但是,切忌自己完全不动手,全部靠其他同学帮忙完成,一定要自己动手操作,不懂的地方或者实在是有些环节卡住不动,实在弄不出来,可以叫同学在旁边指导一下,指出自己的问题所在,如果自己不动手,只是在旁边看其他同学一步步的操作完成的话,看起来自己好像看懂
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年妇产科护理学妇产科常见问题护理技能考核试卷答案及解析
- 2025-2030动力总成电控系统软件开发的功能安全认证报告
- 2025-2030功能性食品原料创新开发方向与消费者健康诉求契合度报告
- 2025-2030功率半导体器件在新能源发电系统中的失效模式与可靠性提升报告
- 2025-2030共享经济平台市场全面调研及商业模式与投资风险评估报告
- 2025-2030共享充电桩运营风险防控与用户体验提升策略报告
- 新能源产业2025:技术创新与知识产权运营政策影响分析报告
- 2025年高速公路沿线光储充一体化项目规划与管理报告
- 2025年工业机器人柔性制造系统应用技术创新报告
- 2025年庆祝三八妇女节妇女权益保障法律知识竞赛题库及参考答案
- 安徽省合肥市六校联考2025-2026年高三上学期开学考试语文试卷(含答案)
- 2025年北京市中考英语真题卷含答案解析
- (2025年标准)课时合同转让协议书
- 风力发电机自动消防系统
- 公益性岗位业务培训课件
- 屋顶分布式光伏发电项目施工组织设计
- 学校安保培训课件
- 2025年湖北武汉理工大学管理人员招聘笔试模拟试题及参考答案详解
- 2025年东风校招测评题库及答案
- 怎样合理减肥健康教育
- 音乐核心素养培训课件
评论
0/150
提交评论