收藏 分享(赏)

编译原理词法分析论文.doc

上传人:hwpkd79526 文档编号:7078095 上传时间:2019-05-05 格式:DOC 页数:15 大小:940KB
下载 相关 举报
编译原理词法分析论文.doc_第1页
第1页 / 共15页
编译原理词法分析论文.doc_第2页
第2页 / 共15页
编译原理词法分析论文.doc_第3页
第3页 / 共15页
编译原理词法分析论文.doc_第4页
第4页 / 共15页
编译原理词法分析论文.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、编译原理结课大作业词法分析设计说明书学生姓名 学 号 所属学院 信息工程学院 专 业 计算机科学与技术 班 级 信息工程学院摘要:计算机系统与人信息交换界面多数是应用高级语言来实现。一个高级语言程序的实现,必须依赖于相应的编译系统。所谓编译程序就是指能够把某一种语言程序转换成另一种与之等价的语言程序。它通常包括五个阶段:词法分析,语法分析,语义分析与中间代码的产生、优化,目标代码的生成。完成计算机翻译过程的关键阶段,它为后面的语法分析、语义分析做好准备,打好基础,以便快速地、高质量地生成目标语言程序。因此词法分析是编译的基础。词法分析器所处理的对象即词法分析程序的输入数据,实际上是源程序经过编

2、译预处理,去掉多余的符号后而形成的代码,这样给词法分析带来方便。词法分析的过程是线性的从头至尾扫描一遍,复杂度较低,易实现。关键词:词法分析 C 语言 标识符塔里木大学- 信息工程学院 目录1、引言 1 2、基于 c 语言词法分析器的设计 . 1 2.1 词法分析器的设计原则 .1 2.2 词法分析器的设计对象 . 12.3 词法分析器的任务及功能 2 -2.4 各种单词符号对应的种别码: .2 3、基于 c 语言词法分析器的实现 . 3 3.1 词法分析程序的算法思想: 3 3.2 主程序示意图: .3 3.3 函数定义说明 4 3.4 程序设计实现及功能说明 54、词法分析程序的 C 语言

3、程序源代码: 5 -5、结果分析: .11 6、总结 12 参考文献 12- 1 -1、引言计算机系统与人信息交换界面多数是应用高级语言来实现。一个高级语言程序的实现,必须依赖于相应的编译系统。所谓编译程序就是指能够把某一种语言程序转换成另一种与之等价的语言程序。它通常包括五个阶段:词法分析,语法分析,语义分析与中间代码的产生、优化,目标代码的生成。完成计算机翻译过程的关键阶段,它为后面的语法分析、语义分析做好准备,打好基础,以便快速地、高质量地生成目标语言程序。因此词法分析是编译的基础。2、基于 c 语言词法分析器的设计2.1 词法分析器的设计原则在编译程序工作的五个阶段中,每个阶段都必须遵

4、从功能等价的原则。词法规则与语法分析阶段依据的语法规则一同构成了一个语言的语法,而语法则是从“形“的角度衡量一个程序是否合法。所以在词法分析阶段,词法规则成为重要的研究对象。词法分析器所处理的对象即词法分析程序的输入数据,实际上是源程序经过编译预处理,去掉多余的符号后而形成的代码,这样给词法分析带来方便。词法分析的过程是线性的从头至尾扫描一遍,复杂度较低,易实现。2.2 词法分析器的设计对象在计算机翻译中,词法分析的关键之一在于如何识别单词的种类,特别是面对定义形式一样、结构完全相同的标识符和保留字,如何正确地解决对它们的识别处理,是词法分析中的一项重要任务。由于我们规定的 c 语言程序语句中

5、涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。规定输出的单词符号格式为如下的二元式:(单词种别,单词自身的值)。通常一种程序语言中定义的单词种类包括标识符(identifier)、保留字(reservedw ord) 、常数(literal)、 运算符(op erator)、界符等。C 语言中定义了属于塔里木大学- 信息工程学院 - 2 -这五种类型的大量的单词,但是由于预编译器只识别我们自定义的注释,因此预编译器处理的单词集只是 C 语言中定义的单词集的一个真子集。2.3 词法分析器的任务及功能2.

6、3.1 词法分析器的任务从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序转换成为单词符号串的中间程序。词法分析程序的输出结果是组成语言的基本元素即单词,在实际处理的时候,输出并非单词,而是每个单词对应的二元式,形为,编码的方式由编译系统的研制者决定。故经过词法分析,在输出结果中并没有单词本身。2.3.2 词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(syn,token 或 sum)构成的序列。其中:syn 为单词种别码;token 为存放的单词自身字符串;sum 为整型常数。例如:对源程序 begin x:=9: if x9 then x:=2*

7、x+1/3; end #的源文件,经过词法分析后输出如下序列:(1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)2.4 各种单词符号对应的种别码:表 2.4 各种单词符号对应的种别码单词符号 种别码 单词符号 种别码bgin 1 : 17If 2 := 18Then 3 21do 5 23lettet(letter|digit)*10 = 24dight dight* 11 = 25+ 13 ; 26 14 ( 27* 15 ) 28/ 16 # 03、基于 c 语言词法分析器的实现本词法分析器是基于 c 语言编写,即它本身程序由 c 语言编写并且它能识别的源程序

8、单词串也是 c 语言编写的源程序。本程序编辑环境是 Touboc 2.0 即可,调用本程序之前需要的在 TC 默认路径下编写一个 c 语言的源程序,并取名 eample.c 以便程序调用分析,输出结果为二元式码。3.1 词法分析程序的算法思想:算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。3.2 主程序示意图:主程序示意图如图 3-1 所示。其中初始包括以下两个方面:塔里木大学- 信息工程学院 - 4 -图 3-1 关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表) ,

9、当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char *rwtab6 = “begin”, “if”, “then”, “while”, “do”, “end”,;输入需要扫描的文件名输入扫描结果另存为的文件名判断文件是否为空预读一位 C hC h 是否为空格返回 , 结束程序否行计数器自加 1C h 是否为字母或下划线跳转到扫描头文件单词及保留字C h 是否为数字或 - 跳转到扫描数字C h 是否为 / C h 是否为引号跳转到扫描注释跳转到扫描引号是否是否否是是否否是跳转到扫描其他符号p 处图 3-13

10、.3 函数定义说明(1) search() 查找并识别当前单词类别,并给定单词类别二元式码,决定给定字符串类别码(即单词种别)和记录次序码。塔里木大学- 信息工程学院 - 5 -(2) alphaprocess() 识别当前是数组、保留字、标识符。(3) point() 识别当前字符串是指针。(4) digitprocess() 识别当前是常整数、小数、负小数。(5) otherprocess() 识别当前是其它(标点符号等) 。(6) fopen() 在默认路径下打开分析程序并读入字符串。3.4 程序设计实现及功能说明3.4.1 关键字的定义void init() for( int j=0;

11、 j#include char prog80,token8,ch;int syn,p,m,n,sum;char *rwtab6=“begin“,“if“,“then“,“while“,“do“,“end“;scaner();塔里木大学- 信息工程学院 - 6 -main()p=0;printf(“n please input a string(end with #):/n“);doscanf(“%c“,progp+=ch;while(ch!=#);p=0;doscaner();switch(syn)case 11:printf(“( %-10d%5d )n“,sum,syn);break;ca

12、se -1:printf(“you have input a wrong stringn“);getch();exit(0);default: printf(“( %-10s%5d )n“,token,syn);break;while(syn!=0);getch();scaner() sum=0;for(m=0;m=a)|(ch=A) 塔里木大学- 信息工程学院 - 7 -while(ch=a)|(ch=A)|(ch=0)ch=progp+;if(ch=) syn=24;tokenm+=ch;else syn=23;p-;break;case +: tokenm+=ch;ch=progp+;i

13、f(ch=+) syn=17;tokenm+=ch;else syn=13;p-;break;case -:tokenm+=ch;ch=progp+;if(ch=-) syn=29;tokenm+=ch;塔里木大学- 信息工程学院 - 9 -else syn=14;p-;break;case !:ch=progp+;if(ch=) syn=21;tokenm+=ch;else syn=31;p-;break;case =:tokenm+=ch;ch=progp+;if(ch=) syn=25;tokenm+=ch;else syn=18;p-;break;case *: syn=15;toke

14、nm+=ch;break;case /: syn=16;塔里木大学- 信息工程学院 - 10 -tokenm+=ch;break;case (: syn=27;tokenm+=ch;break;case ): syn=28;tokenm+=ch;break;case : syn=5;tokenm+=ch;break;case : syn=6;tokenm+=ch;break;case ;: syn=26;tokenm+=ch;break;case “: syn=30;tokenm+=ch;break;case #: syn=0;tokenm+=ch;break;case :syn=17;tok

15、enm+=ch;break;default: syn=-1;break;tokenm+=0;塔里木大学- 信息工程学院 - 11 -5、结果分析:运行结果如图 5-1 所示图 5-1输入 end+good/1+2*1=23;need # 后经词法分析输出如下序列: (end 6)(+ 13)(good 10)(/ 16)(1 11)(+ 13) 如图 5-2 所示:图 5-2塔里木大学- 信息工程学院 - 12 -6、总结计算机系统高级语言翻译是一个涉及到计算机语言学、人工智能、计算机应用等理论和技术的多学科的复杂系统工程。基于 c 语言词法分析器是应用 c 语言编写通过扫描 c 语言源程序,

16、从而正确识别出从源程序中分解出的二元式码形式的单词串,以供语法分析阶段使用。词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。词法分析器是此次编译原理课程的最后一个任务,虽然对书上的理论知识已经事先温习并稳固了,但在刚开始的实践中,对如何进行设计还是很模糊。之后我通过参考一些课外资料,与同学一起探讨学习,明确了词法分析器设计的大概思路后,顺利完成任务。通过这次的实践,使我对编译原理的知识掌握得更扎实、稳固,不再只停留在只会做题却对知识的掌握的一知半解,现在真正将书面知识运用到实际的设计中,使自己对编译原

17、理的理解更深入,更形象,能通过程序将一些原理简单实现。相信有了这次课程设计的经验,会对我下一个程序的课程设计会有很大的帮助通过本试验的完成,更加加深了对词法分析原理的理解。参考文献1 胡元义.编译原理教程M.西安电子科技大学出版社.2003 年 3 月2 刘磊,金英等.编译程序的设计与实现M.高等教育出版社.2004 年 7 月3Kenneth C. Louden 著.冯博琴译.编译原理及实践.机械工业出版社.2000 年4Andrew W.Appel 著.赵克佳等译.现代编译原理 C 语言描述.人民邮电出版社.2006 年5陈火旺,刘春林等.程序设计语言编译原理第三版.国防科大出版社.2001 年

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报