编译课程设计(综合实验)

上传人:工**** 文档编号:564837384 上传时间:2022-09-25 格式:DOCX 页数:10 大小:171.08KB
返回 下载 相关 举报
编译课程设计(综合实验)_第1页
第1页 / 共10页
编译课程设计(综合实验)_第2页
第2页 / 共10页
编译课程设计(综合实验)_第3页
第3页 / 共10页
编译课程设计(综合实验)_第4页
第4页 / 共10页
编译课程设计(综合实验)_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《编译课程设计(综合实验)》由会员分享,可在线阅读,更多相关《编译课程设计(综合实验)(10页珍藏版)》请在金锄头文库上搜索。

1、课程设计报告(20132014年度第一学期)名 称:编译技术课程设计B题 目:小型编译器的设计与实现 院 系:计算机系班 级:学 号:学生姓名:指导教师:李继荣黄建才设计周数:空成 绩:日期:2014年1月4日编译技术课程设计B课程设计任务书一、目的与要求通过设计、编写和调试词法分析程序,了解词法扫描器的组成结构、不同种类单词的识别方 法,掌握由单词的词法规则出发,通过识别单词的状态转换图、利用程序实现词法扫描器的方法。 通过设计、编写和调试语法分析程序,了解语法分析器的组成结构以及对文法的要求,掌握基于 表达式文法的语法分析程序的实现方法。通过设计、编写和调试语法制导翻译程序,掌握从语句 的

2、语法出发,构造相应的语义子程序,实现基于算符优先分析的算术表达式的语法制导翻译。二、主要内容1 词法分析器的设计与实现设计一个简单的词法扫描器。其输入是源程序字符串,输出是二元式(种别编码,单词的属性值),例如“=”符号的输出形式为&),其中种别编码可参照书中单词表自拟某程序设计 语言的单词表及其种别编码。实现方法参考书中函数和程序框架。2 语法分析器的设计与实现自上而下的语法分析方法:构造所用文法的预测分析表,实现方法参考书中算法描述。利用 所得预测分析表采用自上而下的语法分析方法对输入串进行分析。例如,若根据书中算术表达式 文法构造的预测分析表,那么对输入表达式i+i#进行语法分析,输出为

3、分析过程:#Ei+i# E Ti# E Ti+i# E TFi# ET Fi+i# E T ii# ET ii+i# E T# ET +i# E # E +i# E T+i#自下而上的语法分析方法:构造所用文法的算符优先关系表,实现方法参考书中程序框架。利用所得算符优先关系表采用自下而上的语法分析方法对输入串进行分析。例如,若根据书中算术表达式文法构造算符优先表,对输入表达式i+i#进行分析,输出为:# i+i# N+i#i# N+N+ iN+ NN3 语法制导翻译程序采用书中所示的翻译模式,对语法分析正确的程序在其语法分析的基础上,进行语义翻译工 作。每当分析出某语法单位时,就调用对应产生式

4、的语义子程序,完成相应的翻译工作。例如, 表达式文法各个产生式的语义动作表示如下:Ef E+E2E.palce:=newtemp, gen(+, Epalce , E2.palce , E.palce)Ef E*E2E.palce:=newtemp, gen(*, Epalce , E2.palce , E.palce)Ef(E1)E.palce:= E1.palce EfiE.palce:=i 三、进度计划序号设计内容完成时间备注1词法分析器的设计与实现周一2语法分析器的设计与实现周二-周四3语法制导翻译器的实现周五四、设计(实验)成果要求1 词法分析器:能够接收用户录入的一段源程序,并且通

5、过语法分析正确输出此段程序中所 包含的所有单词编码及其属性。2 语法分析器:对输入串进行自上而下或自下而上的语法分析,能够判断输入串是否某文法 的句子。3 语义分析器:对输入源语言程序进行语法制导翻译工作。每当分析出某语法单位时,就调 用相应产生式的语义子程序完成翻译工作。例如,输入i+i#,则输出为:(+, i, i, T1)五、考核方式 根据进度计划的时间安排统一验收所有程序。可根据学生不同的进度提前验收时间,但不可滞后 验收时由学生讲解程序设计的思路和实现方法,教师根据讲解情况提出问题。其中,词法分析程序 30 分,语法分析程序 50 分,语义分析程序 20 分。学生姓名: 指导教师:李

6、继荣 黄建才 2013 年 12 月 29 日一、课程设计(综合实验)的目的与要求通过设计、编写和调试词法分析程序,了解词法扫描器的组成结构、不同种类单词 的识别方法,掌握由单词的词法规则出发,通过识别单词的状态转换图、利用程序实现 词法扫描器的方法。通过设计、编写和调试语法分析程序,了解语法分析器的组成结构 以及对文法的要求,掌握基于LL(1)文法或算符优先文法的语法分析程序的实现方法。 通过设计、编写和调试语法制导翻译程序,掌握从语句的语法出发,构造相应的语义子 程序,实现自定义语言的语法制导翻译。二、设计(实验)正文1、词法分析器的设计与实现1.1待分析的简单语言的词法(1)关键字:be

7、gin if then while do end (所有关键字都是小写字母)(2)运算符和界符:* / + - : := = = = ; ( ) #(3)标识符(4)数字(5)空格由空白和换行符组成。空格一般用来分隔关键字,标识符,数字,运算符和界符, 词法分析阶段通常被忽略。1.2待分析的简单语言的词法单词符号种别码单词符号种别码单词符号种别码单词符号种别码begin1标识符10:17=24if2数字11:二18=25t hen3*132026while4/1421(27do5+15=22)28end61623#01.3词法分析程序的功能 输入:所给文法的源程序字符串。 输出:二元组(syn

8、, token或sum)构成的序列。 其中:syn为单词种别码;token为存放的单词自身字符串;sum为整型常数。 1.4词法分析程序的算法思想:算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。1.4.1主程序示意图:主程序示意图见附录。其中初始包括以下两个方面:(1) 关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描 程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般 标识符。关键字表为一个字符串数组,其描述如下:Char *r

9、wtab6 = “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) 非终结符-非终结符运算符非终结符|表达式

10、(2) 非终结符-非终结符|终结符2.2 语法分析程序步骤(1) 输入文法,根据文法求出非终结符的FIRST集和LAST集(2) 求出终结符表(3) 算出算符有限关系,得出优先关系表(4) 输入单词串,以“#”结束,调用语法分析程序分析语法。如果是文法正确的句子,则 输出成功信息,打印“结束”否则输出“false”2.3 语法分析程序的算法思想:char da ta2020;/算符优先关系char s100;/模拟符号栈schar lable20;/文法终极符集char input100;/文法输入符号串char str2010;/用于输入串的分析int r;int r1;char st103

11、0;char first1010;char last1010;int fflag10=0;int lflag10=0;int deal();int zhongjie(char c);int xiabiao(char c);void out(int j,int k,char *s);void firstvt(char c);void lastvt(char c);void table();/文法规则个数/转化后文法规则个数/用来存储文法规则/文法非终结符FIRSTVT集/文法非终结符LASTVT集/标志第i个非终结符的FIRSTVT集是否已求出/标志第i个非终结符的LASTVT集是否已求出/对输

12、入串的分析/判断字符c是否是终极符/求字符c在算符优先关系表中的下标/打印s栈/求非终结符c的FIRSTVT集/求非终结符c的LASTVT集/创建文法优先关系表3、语法制导翻译程序该算法在语法分析的基础上,将规约后产生的N变为临时变量Ei或中间变量Ti,当产 生中间变量的四元式时,则输出该四元式。为实现算法,这里用到词法分析的思想,将输入字符串先通过词法分析,转化为各单词 的属性值或地址值。此做法便于实现数组的输出和查看。三、课程设计(综合实验)总结或结论 结论:词法分析器虽然可以区分标识符与关键字,但是不能识别出长度大于一个的标识符, 也不能通过程序调入和调出txt文件。语法分析器可以自己输

13、入文法个数和每一种文法,同 时还可以求出每个非终极符的FIRST集和LAST集,然后自动生成算符优先关系表,也可以 对输入的字符串进行分析,并显示出每一步进栈出栈的情况。总结:通过这次实验,我对编译原理这门专业必修课有了进一步的深层次了解,把理论知识 应用于实验中,也让我重新熟悉了C+语言的相关内容,加深了对C+语言知识的深化和用 途的理解。同时这次试验让我了解到如何设计、编制并调试词法、语法和语义分析程序,加 深对词法分析,语法分析及语义分析原理的理解;熟悉构造词法分析,语法分析及语义分析 程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用C+直接编写分析程序。四、参考文献1 陈火旺 程序设计语言编译原理 国防工业出版社 第三版 2009年 6月2 鲁斌 编译技术基础教程 清华大学出版社 2011年 10 月附录(设计流程图、程序、表格、数据等)1、流程图:1)词法2)语法:开始2、表格见上3、数据:词法:r曲I C:v;in d ov/55/5ie m5 2 .cmd.e:eFlease input string:begin if 1 2 a h + = :=# |C1, beC2,ifkn.2kl0.bk25,=C18,:-请技任意键继雾.语法及语义:r

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号