编译原理课程设计说明书.docx
- 文档编号:2375344
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:18
- 大小:470.40KB
编译原理课程设计说明书.docx
《编译原理课程设计说明书.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计说明书.docx(18页珍藏版)》请在冰豆网上搜索。
编译原理课程设计说明书
课程设计说明书
设计题目:
编译原理课程设计
专业:
计算机科学与技术班级:
2013-1
设计人:
学号:
山东科技大学
2016年6月23日
课程设计任务书
学院信息科学与工程学院专业计算机科学与技术班级2013-1姓名
一、课程设计题目:
编译原理课程设计
二、课程设计主要参考资料
(1)韩太鲁等,编译原理.石油大学出版社.2007.9
(2)
(3)
三、课程设计应解决的主要问题:
(1)词法分析之基于文法的实现
(2)词法分析之基于Lex实现词法分析
(3)语法分析之LL1分析法实现
(4)
四、课程设计相关附件(如:
图纸、软件等):
(1)vc++6.0
(2)codeblocks
源代码
五、任务发出日期:
2016-5-5课程设计完成日期:
2016-6-23
指导教师签字:
系主任签字:
指导教师对课程设计的评语
成绩:
指导教师签字:
年月日
词法分析程序
一、设计目的
通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。
并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
二、设计要求
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
并依次输出各个单词的内部编码及单词符号自身值。
(遇到错误时可显示“Error”,然后跳过错误部分继续显示)
三、设计说明
a)需求分析:
程序的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
1、输入及其范围
识别保留字:
if、int、for、while、do、return、break、continue等等;保留字类别码为1。
其他的都识别为标识符;单词类别码为2。
常数为无符号整形数;单词类别码为3。
运算符包括:
+、-、*、/、=、>、<、>=、<=、!
=;类别码为4。
分隔符包括:
、;、{、}、(、);类别码为5。
错误字符类别码为6。
2、输出形式
([数字],‘单词’)数字代表所识别的单词所属的类型。
3、程序功能
输入源程序,进行识别之后输出。
4、测试数据
测试输入的程序为:
main()
{
inta,b;
a=10;
b=a+20;
}
b)概要设计
定义一个字符串,用于输入程序单词的匹配。
Char*identifier[8]=
{"if","int","for","while","do","return","break","continue"};
1、主程序流程
2、模块间的调用关系
c)详细设计
给出模块算法:
读文件时应过滤空白无用字符。
判断是否为关键字和判断是否为标识符是同步的,即不是关键字即为标识符。
同时识别单词的算法思想是相似的,以判断单词是否为关键字为例。
是
否
数字
字母
错误符号
分隔符
运算符
否
是
四、运行结果及分析
测试数据如下图:
结果如下图所示:
五、总结
在本次课程设计当中碰到了许多问题,许多小细节没有掌握好导致做得稀里糊涂的,好在经过思路整理后对对这个词法分析有了整体上的认识,虽然和理想中实现的功能还有一点差距,但是完成了实验。
通过本次的课程设计,我明白了词法分析器的实现过程,不仅学到了新的知识还锻炼了自己的编程能力。
Lex词法分析
一、设计目的
通过编写并上机调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将其分解成各类单词的词法分析方法。
二、设计要求
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
并依次输出各个单词的内部编码及单词符号自身值。
(遇到错误时可显示“Error”,然后跳过错误部分继续显示)
三、设计说明
a)需求分析:
输入及其范围
Lex输入文件由3个部分组成:
定义集(definition),规则集(rule)和辅助程序集(auxiliaryroutine)或用户程序集(userroutine)。
这三个部分由位于新一行第一列的双百分号分开,因此,Lex输入文件的格式如下
{definitions}
%%
{rules}
%%
{auxiliaryroutines}
范围:
识别保留字:
if、int、for、while、do、return等保留字类别码为1。
其他的都识别为标识符;单词类别码为2。
常数为无符号整形数;单词类别码为3。
运算符包括:
+、-、*、/、=、>、<、>=、<=、!
=;类别码为4。
分隔符包括:
、;、{、}、(、);类别码为5。
错误字符类别码为6。
b)输出形式
([数字],“单词“)数字代表所识别的单词所属的类型。
c)程序功能
读取文件中的源程序,然后对源程序分析,输出分析结果。
d)测试数据
将测试数据写在文本文件中,测试为程序的输入数据。
b)概要设计
数据类型的定义
//定义集,包括头文件和变量定义
%{
#include
#include
#include
#include
intlineno=1;//定义行号
%}
//定义正则表达式
letter[A-Za-z]//字母
digit[0-9]//数字
id({letter}|[_])({letter}|{digit}|[_])*//开头为字母的标识符
error_id({digit})+({letter})+//开头为数字的错误标识符
num{digit}+//数字集合
whitespace[\t]+//空格
enter[\n]+//回车
//定义识别规则
%%
c)详细设计
安装ParserGenerator并配置。
在安装了ParserGenerator后,执行以下步骤,即可使VC++编译和链接由ParserGenerator产生的文件。
下边是关于编程环境配置的详细步骤:
1、启动ParserGenerator,点击菜单中的project选项,在子菜单中选择ParserWizard,然后就可以新建,如下图所示:
点击下一步后,选择Lexfileonly见下图:
再点击下一步,如下图:
完成建立。
将所写的代码放到当前建立的文件当中,点击编译,如下图所示,0个错误0个警告:
编译完后会生成mylexer.c和mylexer.h文件,然后启动vc++6.0建立一个空的控制台工程,完成后添加上面的的.c和.h文件,然后设置环境变量。
在工具->选项里设置一下变量:
设置这些文件后,还要在工程->设置中添加yl.lib库,如下图:
然后点击确定完成所有的配置工作。
四、运行结果及测试数据
上面的配置完成后就可以开始进行测试,运行测试如下:
测试样例1:
运行结果如下:
测试样例2:
运行结果如下:
测试样例3:
运行结果如下:
五、总结
这次实验最大的困难是对软件的不熟悉,只好一步步对中Lex的使用说明来学习其使用方法。
而词法分析的原理在经过上一次实验已经有了一定的了解,所以在本次实验轻松了不少,通过本次实验,又进一步加深了我对词法分析的理解。
LL
(1)分析法
一、实验目的:
根据某一文法编制调试LL
(1)分析程序,以便对任意输入的符号串进行分析。
本次实验的目的主要是加深对预测分析LL
(1)分析法的理解。
二、设计要求
实验对下列文法,用LL
(1)分析法对任意输入的符号串进行分析:
(1)E->TG
(2)G->+TG(3)G->ε(4)T->FS
(5)S->*FS(6)S->ε(7)F->(E)(8)F->i
输出的格式如下:
(1)输入一以#结束的符号串(包括+—*/()i#):
在此位置输入符号串
(2)输出过程如下:
步骤
分析栈
剩余输入串
所用产生式
1
E
i+i*i#
E->TG
(3)输入符号串为非法符号串(或者为合法符号串)
三、设计说明
1.需求分析:
a)输入及其范围
输入为文法,表达式中允许使用运算符(+-*/)、分割符(括号)、字符i,结束符#。
b)输出形式
步骤
分析栈
剩余输入串
所用产生式
1
E
i+i*i#
E->TG
c)程序功能
根据输入的文法进行分析,利用LL
(1)控制程序根据显示栈栈顶内容、向前看符号以及LL
(1)分析表,对输入符号串自上而下的分析过程
d)测试数据
输入字符串i+i*i#作为测试。
2.概要设计:
a)数据类型定义:
charA[20];/*分析栈*/
charB[20];/*剩余串*/
charv1[20]={'i','+','*','(',')','#'};/*终结符*/
charv2[20]={'E','G','T','S','F'};/*非终结符*/
b)主程序流程
3.详细设计:
如下图为算法的主要流程:
四、运行结果及测试数据
输入字符串:
i+i*i#,运行结果如下所示:
五、总结
本次课程设计是最难的,所以一开始我先对语法分析进行研究,对文法的分析并且在实验过程中进行思考。
,此次编码也有一定的难度,同时也增强了我的编码能力。
对今后的学习和工作都有很大的帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 说明书