编译原理词法分析器论文.docx
- 文档编号:10892312
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:11
- 大小:239.51KB
编译原理词法分析器论文.docx
《编译原理词法分析器论文.docx》由会员分享,可在线阅读,更多相关《编译原理词法分析器论文.docx(11页珍藏版)》请在冰点文库上搜索。
编译原理词法分析器论文
XX大学学生课程设计(论文)
题目:
关于词法分析器的实现
学号:
姓名:
专业年级:
12计科2班
教师:
2015年6月15日
摘要
词法分析器是通过词法分析程序对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。
并确定其属性(如保留字、标识符、运算符、界限符和常量等)。
再把它们转换称长度统一的标准形式——属性字(TOKEN)。
而词法分析器的功能是输入源程序,输出单词符号,并且词法分析器有两种处理结构:
一种是把词法分析器作为主程序;另一种是把词法分析器作为语法分析程序调用的子程序。
本文所要介绍的词法分析器是第一种,把它作为主程序。
关键词:
词法分析编译原理
Abstract
Lexeristhroughlexicalanalysisproceduresconstituteasourcestringisscannedfromlefttoright,toreadinsourcecodecharactersandcharacter-by-characterinaccordancewiththerulesofwordformationofindependentsignificanceintooneword.Andiftheproperty(asreservedwords,identifiers,operators,boundaries,andconstants,andsoon).Thenunifiedthemsaidthelengthofastandardform--propertywords(TOKEN).LexicalAnalyzerfunctionistheinputsource,outputWordsymbols,andlexicalanalyzerhastwostructures:
oneisthelexicalanalyzerasmainprogram;theotheristheparsercallsthelexicalanalyzerprograms.Thelexicalanalyzeristhefirsttobeintroducedinthisarticle,useitasthemainprogram.
Keywords:
lexicalanalysisCompiler constructionprinciples
1课程设计的基本分析
1.1词法分析器的概述
词法分析器又称扫描器。
其主要任务是从左到右依次描述字符中形式的源程序的各个字符,逐个识别出其中的单词,并将其转换成为部编码形式的单词符号串输出,用于进行语法分析。
词法分析器的工作是低级别的分析:
将字符或者字符序列转化成记号.。
在分析时,一是把词法分析器当成语法分析的一部分,另一种是把词法分析器当成编译程序的独立部分。
在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其Token值返回给语法分析器。
后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。
1.2课程设计的容
通过课程设计进一步理解高级语言在计算机中的执行过程,加深对编译原理中重点算法和编译技术的理解,提高自己的编程能力,培养好的程序设计风格。
同时通过某种可视化编程语言的应用,具备初步的Windows环境下的编程思想。
1.3课程设计的容
设计一个程序,调试、编译,实现词法分析的功能,识别各单词或字符所属类别,并显示在屏幕上。
1.4课程设计的要求
通过词法分析器能够实现以下五种类型如单词等的识别。
(1)关键字"begin","end","if","then","else","while","write","read"等,
"do","call","const","char","until","procedure","repeat"等
(2)运算符:
"+","-","*","/","="等
(3)界符:
"{","}","[","]",";",",",".","(",")",":
"等
(4)标识符
(5)常量
1.5开发工具的选用
软件环境使用Win7操作系统,使用VisualC++作为编程工具,实现词法的分析。
2词法分析模块设计
2.1设计流程图
2.2设计思路
先在桌面建立两个记事本文件,取名为test1.txt和test2.txt,如下
运行程序,出现提示,输入以上两个txt文件的名称,即可对记事本中的容进行分析,并把分析结果输出显示在屏幕上。
2.3设计代码
#include
#include
usingnamespacestd;
#defineMAX22
charch='';
stringkey[15]={"begin","end","if","then","else","while","write","read",
"do","call","const","char","until","procedure","repeat"};
intIskey(stringc){//关键字判断
inti;
for(i=0;i if(key[i].compare(c)==0)return1; } return0; } intIsLetter(charc){//判断是否为字母 if(((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A')))return1; elsereturn0; } intIsDigit(charc){//判断是否为数字 if(c>='0'&&c<='9')return1; elsereturn0; } voidanalyse(FILE*fpin){ stringarr=""; while((ch=fgetc(fpin))! =EOF){ arr=""; if(ch==''||ch=='\t'||ch=='\n'){} elseif(IsLetter(ch)){ while(IsLetter(ch)||IsDigit(ch)){ if((ch<='Z')&&(ch>='A'))ch=ch+32; arr=arr+ch; ch=fgetc(fpin); } fseek(fpin,-1L,SEEK_CUR); if(Iskey(arr)){cout< elsecout< } elseif(IsDigit(ch)){ while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin))){ arr=arr+ch; ch=fgetc(fpin); } fseek(fpin,-1L,SEEK_CUR); cout< } elseswitch(ch){ case'+': case'-': case'*': case'=': case'/': cout< case'(': case')': case'[': case']': case';': case'.': case',': case'{': case'}': cout< case': ': {ch=fgetc(fpin); if(ch=='=')cout<<": ="<<"\t$属于运算符"< else{cout<<"="<<"\t$属于运算符"< fseek(fpin,-1L,SEEK_CUR);} }break; case'>': {ch=fgetc(fpin); if(ch=='=')cout<<">="<<"\t$属于运算符"< if(ch=='>')cout<<">>"<<"\t$属于输入控制符"< else{cout<<">"<<"\t$属于运算符"< fseek(fpin,-1L,SEEK_CUR);} }break; case'<': {ch=fgetc(fpin); if(ch=='=')cout<<"<="<<"\t$属于运算符"< elseif(ch=='<')cout<<"<<"<<"\t$属于输出控制符"< elseif(ch=='>')cout<<"<>"<<"\t$属于运算符"< else{cout<<"<"<<"\t$属于运算符"< fseek(fpin,-1L,SEEK_CUR);} }break; default: cout< "< } } } voidmain(){ charin_fn[30]; FILE*fpin; cout<<"请输入源文件名: \n"; for(;;){ cin>>in_fn; if((fpin=fopen(in_fn,"r"))! =NULL)break; elsecout<<"提示: 路径输入错误! 请重新输入源文件名: "; } cout<<"\n********************************************************"< cout<<"\n********************分析*****************************"< analyse(fpin); fclose(fpin); } 2.4设计结果 对上面的代码进行编译,并得到结果: 输入test1.txt,得到以下结果: 输入test2.txt,得到以下结果: 3总结 通过这次实验,我对词法分析器有了一定的了解,进一步的巩固了这部分的知识。 既通过这次用C语言对词法分析程序的编制,回顾了C语言的编程方法;又加深了对词法分析原理的理解和词法分析的实现过程,掌握了编译程序的实现方法和技术,懂得了词法分析器的工作原理。 在编程过程中,遇到了不少的问题,在同学的帮助下,问题一步一步的得到了解决。 先从实现最简单的扫描和输出,再实现扫描的围扩大和输出的结果更加具体,虽然词法分析器的功能实现了,但是只能只能区分部分关键字。 在算法上虽然是弄懂了词法分析器,但具体实现起来还有一些不足。 参考文献: [1]意云,星.编译原理[M].: 高等教育,2003 [2]火旺.程序设计语言编译原理[M](第三版).: 国防工业出版社,2004 [3]悦红.编译原理及实现[M].清华大学,2005. [4]冬梅,施海虎.编译原理[M].: 人民邮电,2006
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 词法 分析器 论文