循环语句的语法分析及语义分析程序设计.doc_第1页
循环语句的语法分析及语义分析程序设计.doc_第2页
循环语句的语法分析及语义分析程序设计.doc_第3页
循环语句的语法分析及语义分析程序设计.doc_第4页
循环语句的语法分析及语义分析程序设计.doc_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学 号: 0120510680224课 程 设 计题 目WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)学 院计算机科学与技术学院专 业软件工程班 级0502班姓 名杨松林指导教师彭德巍2008年6月21日循环语句的语法分析及语义分析1. 设计题目 基于递归下降分析法的循环语句WHILE E DO S1的语法及语义分析程序,其中E为布尔表达式,S1为赋值语句。输出的中间代码选用三地址码。2. 摘要和关键字 摘要:递归下降分析法是确定的自上而下的分析法,这种分析法要求文法是LL(1)文法。他的基本思想是对文法中的每个非终结符编写一个函数(或子程序)。每个函数的功能是识别由该非终结符所表示的语法成分。根据递归下降的方法,同时利用C+语言对输入的WHILE E DO S1循环语句进行文法分析,并输出其对应的三地址码。 关键字:递归下降分析法,LL(1)文法,语法分析 Abstract: Recursive drop analysis is the top-down analysis to determine that such analysis is required grammar LL (1) grammar. Its basic idea of grammar at the end of each non-preparation of a function (or subroutine). Each function is to identify the function expressed by the NGOs at the end of the grammatical elements. According to drop the recursive method, using the C+ language to input its real grammar analysis, NBL(a language invented by Lukasiewicz) is the real output of its counterparts. Keywords: Recursive drop analysis, LL (1) grammar, syntax analysis3. 正文 3.1引言 递归下降分析法是一种自上而下的语法分析方法,所谓自上而上分析法,就是从文法的开始符号出发,根据文法规则正向推导出给定句子的一种方法。在用递归下降分析法时要注意所选用的文法必须是LL(1)文法。 3.2需求分析 WHILE布尔表达式DO赋值语句,其中:(1)选择递归下降法法完成以上任务,中间代码选用三地址码。(2)写出符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。 程序设计的环境和工具为Windows环境下的Visual C+。 3.3数据结构设计 3.3.1文法的描述终结符:有VT=WHILE、*、/、+、-、=、DO、id、digit、; 非终结符:有VN=S,E,F,M,T,P,B 开始符号:开始符号S=S 产生式:S-id=M |WHILE E do S E-B B M-TF|T F- +TF |-TF| T-BP|B P-*BP|/BP| B-id|digit 3.3.2简要分析与概要设计 出现在循环语句WHILE E DO S1中的布尔表达式E,它的作用在于控制对S1的选择。作为转移条件的布尔式E,我们可以赋予它“出口”,出向S1。本程序采用递归向下分析法,在语法分析的过程中输出中间代码。逆波兰代码采用结构体存放,在输出逆兰式函数中,分别定义操作数数组nbl110和操作符数组nbl220,并利用二重循环逆向输出三地址码。定义存储结构及函数如下: #define MAX_TOKEN 256 /Token表大小 词法分析 #define MAX_QUAD 256 /三地址码数组大小 Token tokentableMAX_TOKEN; /建立词法表 Quad quadMAX_QUAD; /建立三地址码表 bool cifa(); /词法分析函数 void print(); /词法输出函数 void yuyi(); /语义分析函数 void printQuad(); /输出三地址码表 printQuad(); /输出三地址码 本程序对词法分析进行了简化,只能输入WHILE,DO,B,B b DO y=b*2+w; x=h/3-e;保存为test.txt文件与运行程序在一个目录下.运行程序,运行界面首先显示,所要分析的语法结构,然后提示输入文件名,输入要打开的文件,输入test.txt,回车后,立刻显示词法分析和语法语义分析的结果,如下: LO如果ab则跳到L2,如果a=b则执行L1,L1跳到L9即跳出循环语句,L8赋值语句执行完毕跳到L0以实现循环!中间使用了地址回填技术! Test1.txt: WHILE ae DO v=v+1;运行之后截图图下: 这里我专门设计了一个嵌套循环,此法分析正确,语法分析也显示成功,现在来分析正确与否:L0当ae则跳到L4,即执行赋值语句,执行完毕跳到L0循环。返回来分析,如果a不小于l则执行L1,即死循环,这里我转到代码里分析过,应该是地址回填的时候没有考虑到嵌套的问题,所以会如此,但是我调试不了。接下来如果b不大于e则执行L3,跳到L8即跳出循环题。总结下,程序还是完成了大部分功能的!本次课程设计的程序最大的特点就是在进行词法分析的过程中反复运用递归子程序,每一条规则都对应一个函数对它进行分析。语法语义分析是同时进行的,在进行语法分析时,归约过程中产生三地址码,并将它放入三地址码表中。待分析完成后,输出三地址码。唯一不足就是对于while嵌套的地址回填处理不是很完美,期待在以后编程经验增长之后再解决此问题。 3.6设计体会 这次设计我最大的体会就是,编译原理是一门很重要的课程,如果没有学好它,你的程序最多只可以做到程序员的水平,但是如果你要是把编译的内容都搞明白的话,你就可以是一个设计人员,很大的区别,这次课程设计我觉的很难,但是让我的收获很丰富,学习就是在着用实践中增长起来的,我要认真对待每次的课程设计。此次课设对于我来讲是很困难的,起初我选择用MFC的对话框类直观的表示出来程序的执行过程,但是设计对于几大功能的打包,即把词法,语法分析的各个函数包装在类里面,还有MFC里面有很多不懂的问题,遂放弃了。转为利用控制台编写,虽然实现了课设要求的功能,但是总觉得不太满意,希望下次课设的时候技术经验有长进,再来实现自己完美的程序设计吧!4. 结束语 本次课程设计采用递归下降分析法来实现循环语句的语法分析及语义分析,生成中间代码(三地址码)。这次课程设计不仅巩固了我编译原理的知识,也在动手能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论