词法分析器的实现及设计

上传人:M****1 文档编号:499529114 上传时间:2023-06-19 格式:DOC 页数:13 大小:192.50KB
返回 下载 相关 举报
词法分析器的实现及设计_第1页
第1页 / 共13页
词法分析器的实现及设计_第2页
第2页 / 共13页
词法分析器的实现及设计_第3页
第3页 / 共13页
词法分析器的实现及设计_第4页
第4页 / 共13页
词法分析器的实现及设计_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《词法分析器的实现及设计》由会员分享,可在线阅读,更多相关《词法分析器的实现及设计(13页珍藏版)》请在金锄头文库上搜索。

1、题目:词法分析器的设计与实现一、弓丨言4二、 词法分析器的设计 52.1词的部定义52.2词法分析器的任务及功能 5221任务5222功能:62.3单词符号对应的种别码:6三、 词法分析器的实现 73.1主程序示意图:73.2函数定义说明83.3程序设计实现及功能说明 8关键字 8关键字的定义 8符合的关键字的查找 8四、词法分析程序的 C 语言源代码: 9五、结果分析: 12摘要: 词法分析是中文信息处理中的一项根底性工作。词法分 析结果的好坏将直接影响中文信息处理上层应用的效果。 通过权威的 评测和实际应用说明 ,IRLAS 是一个高精度、高质量的、高可靠性的 词法分析系统。 众所周知 ,

2、切分歧义和未登录词识别是中文分词中的 两大难点。 理解词法分析在编译程序中的作用, 加深对有穷自动机模 型的理解,掌握词法分析程序的实现方法和技术, 用c语言对一个简 单语言的子集编制一个一遍扫描的编译程序, 以加深对编译原理的理 解,掌握编译程序的实现方法和技术。Abstract:lexical analysis is a basic task in Chinese information processing. The results of lexical analysis will directly affect the effectiveness of the application

3、of Chinese information processing. The evaluation and practical application show that IRLAS is a high precision, 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 segment

4、ation. The understanding of lexical analyse the program at pile, deepen of finite automata model for understanding, master lexical analysis program implementation method and technology, using C language subset of a simple language pilation of a scanned again piler, to deepen to pile the principle so

5、lution, master piler implementation method and technology.关键词: 词法分析器 扫描器 单词符号 预处理Keywords: lexical analyzer word symbol pretreatment scanner、引言运用 C 语言设计词法分析器, 由指定文件读入预分析的源 程序,经过词法分析器的分析,将结果写入指定文件。本程 序是在Visual Studio环境下,使用 C语言作为开发工具。基 于实验任务的容及目的,实现初步的需求分析,具备词法分 析器的根本功能和整体构架。逐步细化其功能,做到相应模 块的具体化。画出未成熟的

6、流程图,确定整体设计的走向, 在一定围约束编程活动,确保没有大的问题及缺陷存在,然 后通过将来的具体的编程设计完善流程图。完成计算机翻译 过程的关键阶段 ,它为后面的语法分析、语义分析做好准备 打好根底 ,以便快速地、高质量地生成目标语言程序。1、词法分析器的设计由于我们规定的程序语句中涉及单词较少故在词法分析阶段忽略了单词输入错误的检查而将编译程序的重点放在中间代码生成阶段$词法分析器的功能是输入源程序输出单词 符号$规定输出的单词符号格式为如下的二元式!单词种别”单词自身的值#2.1词的部定义对常量,变量,临时变量,保存关键字if,while,begi n,else,do等)、关系运算符、

7、逻辑运算符、分号、括号等,规定其部定义如附表所示符号种屈编科s(02矣櫃才ekeswhile3X W ? whhsdo关龍字do丙一for1黄览宁fara7耳庾语町吕M HPc9布尔淞达貳10当11IS旬L1?ItrnFy15e时变金ISEi and (14?、】9Bod BID3t十36对(=*upand39-and*町porWvrAp1*0141-notrEP12vHMrizi 1討m!创56变址ihlrtirtt57ft#*2.2词法分析器的任务及功能任务就编译器根本构造而言,词法分析lexical analysiS是编译过程的第一阶段。实际上,在词法分析之前,有些编译器模型存在编译预处

8、理阶段,C语言就是一个典型的例子。 不过, 大多数Pascal编译器都不存在预处理器。本书对编译预处理不作讨论。词法分析的任务是从 左到右扫描与分析构成源程序的字符流字符串,把字符流分解为多个单词 token。 每个单词都是具有独立含义且不可再分割的字符序列。 在编译器框架中,完成词法分析任务 的模块称为词法分析器。222功能:词法分析器的根本功能是, 按照语言的定义规那么, 逐个地读入源程序的符号, 识别出 对语言有意义的符号串,即单词符号;然后分析单词符号的属性,并把单词符号及其属性填 写在表中;同时把源程序改造成等价的计算机部表示一一单词记号,以便编译的后续阶段使用。(1)识别出源程序中

9、的各个单词符号,并将其转换成部编码形式;(2)删除无用的空白字符、回车字符以及其他非实质性字符;(3)删除注释(4)进展词法检查,报告所发现的错误。2.3单词符号对应的种别码:单词符号对应的种别码单词符号种别码单词符号种别码bgin1:17If218The n320wile421do523lettetletter|digit*10=24dight dight*11=25+13;26一14(27*15)28/16#0三、词法分析器的实现编写词法分析器,词法分析器能够识别关系算符, 词法分析器能够识别标识符和关键字, 词法分析器能够识别无符号数。编制一个能够分析三种整数、标识符、主要运算符和主要关

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

11、ab6 = “begin , if , “then , “while , “do , “end ,;置初值调用扫描子程序输出单词二元组输出串完毕?是f完毕(2)程序中需要用到的主要变量为syn, token和sum。3.2 函数定义说明(1) search() 查找并识别当前单词类别, 并给定单词类别二元式码, 决定给定字符串类别码 单词种别和记录次序码。(2) alphaprocess() 识别当前是数组、保存字、标识符。(3) point() 识别当前字符串是指针。(4) digitprocess() 识别当前是常整数、小数、负小数。(5) otherprocess() 识别当前是其它标点

12、符号等。(6) fopen() 在默认路径下翻开分析程序并读入字符串。3.3 程序设计实现及功能说明关键字关键字:begin if end whlie else write read do call const charUntil produce repeat运算符:+ * /界符: ( ) , . ; :关键字的定义void init() for( int j=0; j18; j+) strcpy(symtablej.lexptr,strj);symtablej.token=j+3; 符合的关键字的查找int search(char *temp) for(unsigned int i=0;i

13、 18;i+) if(!strcmp(symtablei.lexptr ,temp) return symtablei.token; return 0;四、词法分析程序的 C 语言源代码:#include #includeusing namespace std;#define MAX 22char ch = ;string key15=begin,end,if,then,else,while,write,read,do, call,const,char,until,procedure,repeat;/ 字符串键 15 = “开场, “完毕, “如果, “当时, “其他, “当, “写 “读,“

14、做,“,“常量,“字符,“直到,“程序,“重复 ; int Iskey(string c) / 关键字判断int i;for(i=0;iMAX;i+) if(keyi.pare(c)=0) return 1; / 将 i 作比拟,返回 1return 0;int IsLetter(char c) / 判断是否为字母if(c=a)|(c=A) return 1; else return 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)!=

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

当前位置:首页 > 办公文档 > 活动策划

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