2022年词法分析器的实现与设计学习资料 .pdf

上传人:Q****o 文档编号:27976300 上传时间:2022-07-26 格式:PDF 页数:16 大小:240.50KB
返回 下载 相关 举报
2022年词法分析器的实现与设计学习资料 .pdf_第1页
第1页 / 共16页
2022年词法分析器的实现与设计学习资料 .pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《2022年词法分析器的实现与设计学习资料 .pdf》由会员分享,可在线阅读,更多相关《2022年词法分析器的实现与设计学习资料 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、词 法 分 析 器 的 实 现 与设 计名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除题目:词法分析器的设计与实现一、引言 . 5 二、词法分析器的设计 . 6 2.1 词的内部定义. 6 2.2 词法分析器的任务及功能. 6 2.2.1 任务 . 6 2.2.2 功能: . . 7 2.3 单词符号对应的种别码:. 7 三、词法分析器的实现 . 8 3.1 主程序示意图: . .

2、 8 3.2 函数定义说明 . . 9 3.3 程序设计实现及功能说明. 9 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除3.3.1 关键字 . 9 3.3.2 关键字的定义. 10 3.3.3 符合的关键字的查找 . 10 四、词法分析程序的C语言源代码: . 10 五、 结果分析: . 14 摘要:词法分析是中文信息处理中的一项基础性工作。词法分析结果的好坏将直接影响中文信息

3、处理上层应用的效果。通过权威的评测和实际应用表明,IRLAS 是一个高精度、高质量的、高可靠性的词法分析系统。众所周知 , 切分歧义和未登录词识别是中文分词中的两大难点。理解词法分析在编译程序中的作用,加深对有穷自动机模型的理解,掌握词法分析程序的实现方法和技术,用c 语言对一个简单语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解 , 掌握编译程序的实现方法和技术。Abstract:lexical analysis is a basic task in Chinese information processing. The results of lexical analysis w

4、ill directly affect the effectiveness of the 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除application of Chinese information processing. The evaluation and practical application show that IRLAS is a high precision,

5、 high quality and high reliability lexical analysis system. It is well known that segmentation ambiguity and unknown word recognition are the two major difficulties in Chinese word segmentation. The understanding of lexical analyse the program at compile, deepen of finite automata model for understa

6、nding, master lexical analysis program implementation method and technology, using C language subset of a simple language compilation of a scanned again compiler, to deepen to compile the principle solution, master compiler implementation method and technology. 关键词:词法分析器扫描器单词符号预处理Keywords: lexical a

7、nalyzer word symbol pretreatment scanner名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除一、引言运用 C语言设计词法分析器,由指定文件读入预分析的源程序,经过词法分析器的分析,将结果写入指定文件。本程序是在Visual Studio环境下,使用C语言作为开发工具。基于实验任务的内容及目的,实现初步的需求分析,具备词法分析器的基本功能和整体构架。

8、逐步细化其功能,做到相应模块的具体化。画出未成熟的流程图,确定整体设计的走向,在一定范围内约束编程活动,确保没有大的问题及缺陷存在,然后通过将来的具体的编程设计完善流程图。完成计算机翻译过程的关键阶段, 它为后面的语法分析、语义分析做好准备, 打好基础 , 以便快速地、高质量地生成目标语言程序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除二、词法分析器的设计由于我们规定的程序语句

9、中涉及单词较少 故在词法分析阶段忽略了单词输入错误的检查 而将编译程序的重点放在中间代码生成阶段 $词法分析器的功能是输入源程序 输出单词符号$规定输出的单词符号格式为如下的二元式%!单词种别 单词自身的值 #2.1 词的内部定义对常量,变量,临时变量,保留关键字(if,while,begin,else,do等) 、关系运算符、逻辑运算符、分号、括号等, 规定其内部定义如附表所示2.2 词法分析器的任务及功能2.2.1 任务就编译器基本结构而言,词法分析(lexical analysis)是编译过程的第一阶段。实际上,在词法分析之前,有些编译器模型存在编译预处理阶段,C语言就是一个典型的例子。

10、不过,大多数Pascal 编译器都不存在预处理器。本书对编译预处理不作讨论。词法分析的任务是从左到右扫描与分析构成源程序的字符流(字符串),把字符流分解为多个单词(token )。每个单词都是具有独立含义且不可再分割的字符序列。在编译器框架中,完成词法分析任务的模块称为词法分析器。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除2.2.2 功能:词法分析器的基本功能是,按照语言的定义

11、规则,逐个地读入源程序的符号,识别出对语言有意义的符号串,即单词符号;然后分析单词符号的属性,并把单词符号及其属性填写在表中;同时把源程序改造成等价的计算机内部表示单词记号,以便编译的后续阶段使用。(1)识别出源程序中的各个单词符号,并将其转换成内部编码形式;(2)删除无用的空白字符、回车字符以及其他非实质性字符;(3)删除注释(4)进行词法检查,报告所发现的错误。2.3 单词符号对应的种别码:单词符号对应的种别码单词符号种别码单词符号种别码bgin 1 :17 If 2 := 18 Then 3 20 wile 4 21 do 5 23 lettet(letter|digit)* 10 =

12、24 dight dight* 11 = 25 + 13 ;26 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除14 ( 27 * 15 ) 28 / 16 # 0 三、词法分析器的实现编写词法分析器,词法分析器能够识别关系算符,词法分析器能够识别标识符和关键字,词法分析器能够识别无符号数。编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析器。词法分析是从左向右扫描

13、每行源程序的符号,拼成单词,换成统一的二元式( 单词种别码,单词符号的属性值) 表示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式( 单词种别码,单词符号的属性值) 显示,设计一个词法分析程序,理解词法分析器实现的原理,掌握程序设计语言中的各类单词的词法分析方法,加深对词法分析原理的理解。3.1 主程序示意图: 关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char *rwtab6 = “begin ”, “if

14、 ”, “then”, “while ”, “do”, “end”,; 置初值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除是(2)程序中需要用到的主要变量为syn,token 和 sum。3.2 函数定义说明(1) search() 查找并识别当前单词类别,并给定单词类别二元式码,决定给定字符串类别码(即单词种别)和记录次序码。(2) alphaprocess() 识别当前是数组

15、、保留字、标识符。(3) point() 识别当前字符串是指针。(4) digitprocess() 识别当前是常整数、小数、负小数。(5) otherprocess() 识别当前是其它(标点符号等)。(6) fopen() 在默认路径下打开分析程序并读入字符串。3.3 程序设计实现及功能说明3.3.1 关键字关键字:begin if end whlie else write read do call const charUntil produce repeat调用扫描子输出单词二元输出串结结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

16、 - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除运算符:+ * /界符: ( ) , . ; :3.3.2 关键字的定义void init() for( int j=0; j18; j+) strcpy(symtablej.lexptr,strj); symtablej.token=j+3; 3.3.3 符合的关键字的查找int search(char *temp) for(unsigned int i=0;i 18;i+) if(!strcmp(symtablei.lexptr

17、,temp) return symtablei.token; return 0; 四、词法分析程序的C语言源代码:#include #include using namespace std; #define MAX 22 char ch = ; string key15=begin,end,if,then,else,while,write,read,do, call,const,char,until,procedure,repeat; / 字符串键 15 = “开始”,“结束”,“如果”,“当时”,“其他”,“当”,“写”,“读”,“做”,“访问”,“常量”,“字符”,“直到”,“程序”,“重

18、复” ;int Iskey(string c) /关键字判断名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除 int i; for(i=0;iMAX;i+) if(pare(c)=0) return 1; /将 i 作比较,返回 1 return 0; int IsLetter(char c) /判断是否为字母 if(c=a)|(c=A) return 1; else return

19、 0; int IsDigit(char c) /判断是否为数字 if(c=0&c=9) return 1; else return 0; void analyse(FILE *fpin) /无效的分析(文件及外地个人识别号) string arr=; while(ch=fgetc(fpin)!=EOF) /赋值 arr=; if(ch= |ch=t|ch=n) else if(IsLetter(ch) while(IsLetter(ch)|IsDigit(ch) if(ch=A) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEE

20、K_CUR); if (Iskey(arr)coutarrt$关键字 endl; else coutarrt$普通标识符 endl; else if(IsDigit(ch) while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - 精品文档收集

21、于网络,如有侵权请联系管理员删除 coutarrt$无符号实数 endl; else switch(ch) /标识符分类识别 case+: case- : case* : case/ :coutcht$运算符 endl;break; case= : case( : case) : case : case : case : case :coutcht$界符endl;break; case; : case, : case: :ch=fgetc(fpin); if(ch=) cout:=t$运算符 endl; else cout=t$运算符 endl; fseek(fpin,-1L,SEEK_CUR

22、); break; case. : case :ch=fgetc(fpin); if(ch=)cout=t$运算符 endl; else if(ch=)coutt$输出控制符) coutt$运算符endl; elsecoutt$运算符 :ch=fgetc(fpin); if(ch=) cout=t$运算符 )coutt$输入控制符 endl; else coutt$运算符 endl; fseek(fpin,-1L,SEEK_CUR); break; default : coutcht$无法识别字符 endl; void main() char in_fn30; FILE * fpin; cou

23、tin_fn; if(fpin=fopen(in_fn,r)!=NULL) break; else cout该文件路径错误!请输入要查询的源文件名(包括路径和后缀名) :; coutn*查询结果分析如下*endl; analyse(fpin); fclose(fpin); coutendl; cout按任意键结束 a; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除五、结果分析:

24、在电脑 D盘有一个名为源程序的文本文档,以此为例,运行结果如下:输入:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除输出:六总结 : 在实验过程中遇到了很多的问题,经过查找资料和求助于同学再结合课堂上老师所讲解的内容,逐渐的把所遇到的问题解决。实验的时候会出现各种BUG ,而且比较注意细节问题,一点点问题出错就与自己所预想的结果有较大差距。实验过程中我了解到c 语言词法分析器是应

25、用c 语言编写通过扫描c 语言源程序,从而正确识别出从源程序中分解出的二元式码形式的单词串, 以供语法分析阶段使用。词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - 精品文档收集于网络,如有侵权请联系管理员删除是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。通过实验我对编译原理这门功课的知识掌握更加扎实稳固,比之前的只浮于表面的了解一些知识要有进步的多。有了这次实验的经验更加加深了我对词法分析的理解,并且在之后的学习中更加激励我深入了解知识。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁