编译原理课程设计词法分析器设计.docx
- 文档编号:2902487
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:11
- 大小:115.65KB
编译原理课程设计词法分析器设计.docx
《编译原理课程设计词法分析器设计.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计词法分析器设计.docx(11页珍藏版)》请在冰豆网上搜索。
编译原理课程设计词法分析器设计
编译方法课程设计
词法分析器设计
学院:
计算机与信息工程学院
专业:
软件工程
学号:
姓名:
指导教师:
职称:
设计报告日期:
二О一二年十二月
1设计概述
1.1设计题目
词法分析器的设计与实现。
1.2设计目的
词法分析是编译程序第一个阶段的工作,它的任务是对输入的字符串形式的源程序进行扫描,在扫描的同时,根据源语言的词法规则识别具有独立意义的单词。
本设计是C++高级程序语言,数据结构和变异原理中词法分析原理等知识的综合运用。
掌握生成词法分析器的方法,加深对词法分析原理的理解,掌握设计,编制并调试词法分析程序的思想和方法。
1.3设计任务内容:
1、格式
输入:
将C++语言的源代码 从文本文档中读入。
处理:
对输入框中的代码进行词法分析,分离出关键字、标示符、数值、运算符和界符。
输出:
在文本文档中输出每个单词对应的编码和值。
2、编译对象
声明和其他标记
赋值语句
分支结构语句
循环语句
1.4设计时间
2012年12月23日至2012年12月28日
2设计环境与工具
Windows7环境下使用C++语言。
3设计要求
1、使用任何一种编程语言编制一个词法分析程序。
2、该程序能够识别的单词有5类:
(1)关键字:
"long","float","static","char","short","switch","int","const","if","then","else","for","while","break"。
(2)常数:
任何整型常数
(3)标识符:
字母打头的字母数字串。
<标识符>→<标识符><字母>
<标识符>→<标识符><数字>
<标识符>→<字母>
(4)运算符:
算术运算符+,-,*,/
关系运算符>,>=,<,<=,=,<>
(5)界符:
(,),”,!
,;
3、源程序放在的文本文档中。
4、产生下面9个单词:
(1)a标识符
(2)=赋值(3)(左括号(4)b标识符
(5)+加号(6)c标识符(7))右括号(8)*乘号(9)3常数
4分析与概要设计
在词法分析程序设计中,以只读方式读取一个文件,文件内容的末尾以“#”作为结束符。
系统将读取的字符自动送入缓冲区。
扫描第一个字符,看匹配的类型,并进行相应的类型分析,满足判断类型时,输出其种别码和值。
运用指针进行处理,必须熟悉字符串函数的使用。
程序要对非法的字符做出错误提示。
文本扫描看结尾是否是“#”。
最后关闭文件,释放指针。
5算法流程图
6源程序清单
#include
#include
#include
usingnamespacestd;
charch;//当前从文件中读取的字符
charTake[20];//存放Take
intk;//当前Take中的第K个字符
ifstreamfin;
ofstreamfout("output.txt");
char*Keywords[]={"long","float","static","char","short",
"switch","int","const","if","then","else","for","while","break"};//保留字
intlpos=1;//列号
voidgetChar()//读入文件的下一个字符
{
lpos++;
ch=fin.get();
}
boolisInteger()
{
if(ch>='0'&&ch<='9')
returntrue;
else
returnfalse;
}
boolisLetter()
{
if(((ch>='a')&&(ch<='z'))||(ch>='A'&&ch<='Z'))
returntrue;
else
returnfalse;
}
voidcontact()//将文件中读入的字符加入Take数组的最后
{
Take[k]=ch;
k++;
}
boolisKeyword()//判断Take是否为保留字
{
for(inti=0;i<14;i++)
{
if(strcmp(Keywords[i],Take)==0)
returntrue;
else
returnfalse;
}
}
voidclear()
{
for(inti=0;i<20;i++)
Take[i]='\0';
k=0;
}
voidyyLex()
{
switch(ch)
{
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
contact();
getChar();
{
while(isInteger())
{
contact();
getChar();
}
fout<<"常数"<<'\t'< } clear(); yyLex(); break; case'a': case'b': case'c': case'd': case'e': case'f': case'g': case'h': case'i': case'j': case'k': case'l': case'm': case'n': case'u': case'o': case'p': case'q': case'r': case's': case't': case'y': case'v': case'w': case'x': case'z': case'A': case'B': case'C': case'D': case'E': case'F': case'G': case'H': case'I': case'J': case'K': case'L': case'M': case'N': case'O': case'P': case'Q': case'R': case'S': case'T': case'U': case'V': case'W': case'X': case'Y': case'Z': contact(); getChar(); while(isLetter()||isInteger()) { contact(); getChar(); } if(isKeyword()) { fout<<"关键字"<<'\t'< clear(); yyLex(); } else { fout<<"标识符"<<'\t'< clear(); yyLex(); } break; case'(': case')': case',': case'"': case';': case'! ': contact(); fout<<"界符"<<'\t'< clear(); yyLex(); break; case'+': case'-': case'*': case'/': contact(); fout<<"算术运算符"<<'\t'< clear(); break; case'=': case'<': case'>': contact(); getChar(); if(ch=='=') { contact(); fout<<"关系运算符"<<'\t'< clear(); } else { fout<<"关系运算符"<<'\t'< clear(); yyLex(); } break; } clear(); } intmain() { fin.open("input.txt"); ch=fin.get(); while(! fin.eof()) { if(ch! ='\0'||ch! ='#') yyLex(); getChar(); } fout.close(); return0; } 7软件测试 7.1设计的测试题目 a=(b+c)*3 7.2测试结果截图 8总结 本次设计达到了预先的实验目的,基于C++语言小型编译器是对本学科的一次综合性的检验,是一次理论与实践相结合的实践。 我在整个程序的编写过程中,巩固了书本上的理论知识,并且加深了词法分析器的原理。 同时也遇到了很多的困难,比如C++语言有所欠缺,编译方法的原理还有待弥补与继续学习。 由于时间仓促和自己所掌握知识不完善,此设计只是实现了简单的词法分析。 对C++字符串函数不是很熟悉。 程序中可能会出现这一类情况,如: 读入的词语为: a=(b+c)#*3#。 本设计对在词语中间出现的“#”没有能很好的处理。 希望能在接下来的时间里,能把这个问题解决掉。 借此机会,我要特别感谢我的指导老师董改芳,在我的课程设计和此门课程的学习中给予我的悉心指导和帮助。 老师的一丝不苟的工作和对教学的认真态度深深感染了我。 最后,向支持和帮助过我的老师和同学表示我深深的谢意。 9参考文献 [1]劳顿(Louden,K.C).编译原理及实践.机械工业出版社.2002.3 [2]胡元义邓亚玲.编译原理实践教程.西安电子科技大学出版社.2002. [3]柯丽芳胡元义.编译原理学习指导.西安电子科技大学出版社.2004. [4]内蒙古农业大学《编译方法课程设计》指导书。 董改芳主编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 词法 分析器 设计