编译课程设计(综合实验).doc_第1页
编译课程设计(综合实验).doc_第2页
编译课程设计(综合实验).doc_第3页
编译课程设计(综合实验).doc_第4页
编译课程设计(综合实验).doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

VIP免费下载

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

文档简介

课程设计报告 ( 20132014 年度第 一 学期)名 称: 编译技术课程设计B 题 目:小型编译器的设计与实现院 系: 计算机系 班 级: 学 号: 学生姓名: 指导教师: 李继荣 黄建才 设计周数: 1周 成 绩: 日期:2014年 1月 4日编译技术课程设计B课程设计任 务 书一、 目的与要求通过设计、编写和调试词法分析程序,了解词法扫描器的组成结构、不同种类单词的识别方法,掌握由单词的词法规则出发,通过识别单词的状态转换图、利用程序实现词法扫描器的方法。通过设计、编写和调试语法分析程序,了解语法分析器的组成结构以及对文法的要求,掌握基于表达式文法的语法分析程序的实现方法。通过设计、编写和调试语法制导翻译程序,掌握从语句的语法出发,构造相应的语义子程序,实现基于算符优先分析的算术表达式的语法制导翻译。二、 主要内容1 词法分析器的设计与实现设计一个简单的词法扫描器。其输入是源程序字符串,输出是二元式(种别编码,单词的属性值),例如“”符号的输出形式为(8,),其中种别编码可参照书中单词表自拟某程序设计语言的单词表及其种别编码。实现方法参考书中函数和程序框架。2 语法分析器的设计与实现自上而下的语法分析方法:构造所用文法的预测分析表,实现方法参考书中算法描述。利用所得预测分析表采用自上而下的语法分析方法对输入串进行分析。例如,若根据书中算术表达式文法构造的预测分析表,那么对输入表达式i+i进行语法分析,输出为分析过程:Ei+iETiETi+iETFiETFi+iET iiETii+iETET+iEE+iET+i自下而上的语法分析方法:构造所用文法的算符优先关系表,实现方法参考书中程序框架。利用所得算符优先关系表采用自下而上的语法分析方法对输入串进行分析。例如,若根据书中算术表达式文法构造算符优先表,对输入表达式i+i进行分析,输出为:i+iN+iN+iN+ iN+ NN3 语法制导翻译程序采用书中所示的翻译模式,对语法分析正确的程序在其语法分析的基础上,进行语义翻译工作。每当分析出某语法单位时,就调用对应产生式的语义子程序,完成相应的翻译工作。例如,表达式文法各个产生式的语义动作表示如下:EE1+E2E.palce:=newtemp, gen(+, E1.palce , E2.palce , E.palce)EE1*E2E.palce:=newtemp, gen(*, E1.palce , E2.palce , E.palce)E(E1)E.palce:= E1.palce EiE.palce:=i 三、 进度计划序号设计内容完成时间备注1词法分析器的设计与实现周一2语法分析器的设计与实现周二-周四3语法制导翻译器的实现周五四、 设计(实验)成果要求1 词法分析器:能够接收用户录入的一段源程序,并且通过语法分析正确输出此段程序中所包含的所有单词编码及其属性。2 语法分析器:对输入串进行自上而下或自下而上的语法分析,能够判断输入串是否某文法的句子。3 语义分析器:对输入源语言程序进行语法制导翻译工作。每当分析出某语法单位时,就调用相应产生式的语义子程序完成翻译工作。例如,输入i+i,则输出为:(+, i, i, T1) 五、 考核方式根据进度计划的时间安排统一验收所有程序。可根据学生不同的进度提前验收时间,但不可滞后。验收时由学生讲解程序设计的思路和实现方法,教师根据讲解情况提出问题。其中,词法分析程序30分,语法分析程序50分,语义分析程序20分。学生姓名:指导教师:李继荣 黄建才 2013 年 12 月 29 日一、课程设计(综合实验)的目的与要求通过设计、编写和调试词法分析程序,了解词法扫描器的组成结构、不同种类单词的识别方法,掌握由单词的词法规则出发,通过识别单词的状态转换图、利用程序实现词法扫描器的方法。通过设计、编写和调试语法分析程序,了解语法分析器的组成结构以及对文法的要求,掌握基于LL(1)文法或算符优先文法的语法分析程序的实现方法。通过设计、编写和调试语法制导翻译程序,掌握从语句的语法出发,构造相应的语义子程序,实现自定义语言的语法制导翻译。二、设计(实验)正文1、词法分析器的设计与实现1.1待分析的简单语言的词法(1)关键字: begin if then while do end (所有关键字都是小写字母)(2)运算符和界符: * / + : := = = = ; ( ) #(3)标识符(4)数字(5)空格由空白和换行符组成。空格一般用来分隔关键字,标识符,数字,运算符和界符,词法分析阶段通常被忽略。1.2待分析的简单语言的词法单词符号种别码单词符号种别码单词符号种别码单词符号种别码 begin 1 标识符 10 : 17 = 24 if 2 数字 11 := 18 = 25 then 3* 13 20 ; 26 while 4/ 14 21 ( 27 do 5+ 15 = 22 ) 28 end 6- 16 23 # 01.3词法分析程序的功能输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码;token为存放的单词自身字符串;sum为整型常数。1.4词法分析程序的算法思想: 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。1.4.1主程序示意图: 主程序示意图见附录。其中初始包括以下两个方面:(1)关键字表的初值。 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char *rwtab6 = “begin”, “if”, “then”, “while”, “do”, “end”;(2)程序中需要用到的主要变量为syn,token和sum1.4.2扫描子程序的算法思想: 首先设置3个变量:token用来存放构成单词符号的字符串;sum用来整型单词;syn用来存放单词符号的种别码。扫描子程序主要部分流程如图1-2所示。1.4.3词法分析程序步骤:(1)输入要分析的字符串,以“#”结束。(2)利用scaner函数分类,判断属于哪一类单词(3)输出单词的类别和字符2、语法分析器的设计与实现2.1 待分析的简单语言的语法(1)-|(2)-|2.2 语法分析程序步骤(1)输入文法,根据文法求出非终结符的FIRST集和LAST集(2)求出终结符表(3)算出算符有限关系,得出优先关系表(4)输入单词串,以“#”结束,调用语法分析程序分析语法。如果是文法正确的句子,则输出成功信息,打印“结束”,否则输出“false”。2.3 语法分析程序的算法思想:char data2020; /算符优先关系char s100; /模拟符号栈s char lable20; /文法终极符集char input100; /文法输入符号串char str2010; /用于输入串的分析int r; /文法规则个数int r1; /转化后文法规则个数char st1030; /用来存储文法规则char first1010; /文法非终结符FIRSTVT集char last1010; /文法非终结符LASTVT集int fflag10=0; /标志第i个非终结符的FIRSTVT集是否已求出int lflag10=0; /标志第i个非终结符的LASTVT集是否已求出int deal(); /对输入串的分析int zhongjie(char c); /判断字符c是否是终极符int xiabiao(char c); /求字符c在算符优先关系表中的下标void out(int j,int k,char *s); /打印s栈void firstvt(char c); /求非终结符c的FIRSTVT集void lastvt(char c); /求非终结符c的LASTVT集void table(); /创建文法优先关系表3、语法制导翻译程序该算法在语法分析的基础上,将规约后产生的N变为临时变量Ei或中间变量Ti,当产生中间变量的四元式时,则输出该四元式。为实现算法,这里用到词法分析的思想,将输入字符串先通过词法分析,转化为各单词的属性值或地址值。此做法便于实现数组的输出和查看。三、课程设计(综合实验)总结或结论结论:词法分析器虽然可以区分标识符与关键字,但是不能识别出长度大于一个的标识符,也不能通过程序调入和调出txt文件。语法分析器可以自己输入文法个数和每一种文法,同时还可以求出每个非终极符的FIRST集和LAST集,然后自动生成算符优先关系表,也可以对输入的字符串进行分析,并显示出每一步进栈出栈的情况。总结:通过这次实验,我对编译原理这门专业必修课有了进一步的深层次了解,把理论知识应用于实验中,也让我重新熟悉了C+语言的相关内容,加深了对C+语言知识的深化和用途的理解。同时这次试验让我了解到如何设计、编制并调试词法、语法和语义分析程序,加深对词法分析,语法分析及语义分析原理的理解;熟悉构造词法分析,语法分析及语义分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用C+直接编写分析程序。四、参考文献1 陈火旺 程序设计语言编译原理 国防工业出版社 第三版 2009年6月2 鲁斌 编译技术基础教程 清华大学出版社 2011年10月附录(设计流程图、程序、表格、数据等)1、 流程图:(1) 词法置初值调用扫描子程序输出单词二元组输入串结束开始结束是否变量初始化忽略空格是否文件结束? 拼数syn=1111对不同符号给出相应的syn值报错拼字符串是否

温馨提示

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

评论

0/150

提交评论