下载此文档

词法分析器.doc


文档分类:IT计算机 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
目录第1章概述 2第2章词法分析器课程设计 2第3章问题分析及相关原理介绍 4第4章设计思路及关键问题的解决方法 5第5章运行结果及测试分析 6心得体会 7附录源程序 ,其中包括词法分析、语法分析、语义分析、中间代码生成、目标代码生成优化、独立于机器的优化和依赖于机器的优化等。编译器技术的发展,特别是计算机体系结构的发展对编译技术的推动,使其成为计算机专业人士所必需具备的基础知识之一。,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。并确定其属性(如保留字、标识符、运算符、界限符和常量等)。再把它们转换称长度统一的标准形式——属性字(TOKEN)。而词法分析器的功能是输入源程序,输出单词符号,并且词法分析器有两种处理结构:一种是把词法分析器作为主程序;另一种是把词法分析器作为语法分析程序调用的子程序。下面我所要介绍的词法分析器是第一种把它作为主程序。,加深对编译原理中重点算法和编译技术的理解,提高自己的编程能力,培养好的程序设计风格。同时通过某种可视化编程语言的应用,(1)设计内容:运用所学****的编程工具编写词法分析器,本次设计我采用C++编写实现其输入输出功能。(2)设计要求及说明:完成下述文法所描述的单词符号的词法分析程序。<标识符>--><字母>|<标识符><字母>|<标识符><数字><无符号整数>--><数字>|<无符号整数><数字><分界符>-->+|-|*|/|;|(|)|{|}|<|<=|=|!=|>=|>|=|<空格><字母>-->a|…|z|A|…|Z<数字>-->0|…|9<空格>-->’’说明:1>假定该语言对字母的大小写不敏感,由指定文件读入预分析的源程序,分析结果再写入指定文件;2>语言关键字为:"if","else","then","for","while","do";(1)主要算法的设计:该词法分析器首先扫描文件,识别出一系列具有独立意义的基本语法单位——单词,包括关键字、保留字、标识符、各种常数、各种运算符及界符等。由于我们规定的c++语言程序语句中涉及单词较少,所以在词法分析阶段忽略了单词输入错误的检查,并在扫描后输出单词符号。规定输出的单词符号格式为如下的二元式:(单词种别,单词自身的值)。c++语言中定义了属于这五种类型的大量的单词,但是由于预编译器只识别我们自定义的注释,因此预编译器处理的单词集只是c++语言中定义的单词集的一个真子集。(2)算法实现<1>fopen()打开源文件,读入字符,对文件进行扫描,把读入的字符放入缓冲区中,然后对该字符进行判断。<2>若是字母开头,则可能是关键字或者标识符,因此进入letterprocess()进行识别。识别的过程为:将以字母开头的字母数字串放入charletter[30]中,然后进行识别。识别的过程是先让它与保留关键字表中的所有关键字进行匹配,若获得成功则说明它是关键字,则输出其二元式;否则说明其为标识符,这时,将它与标识符表char*label[20]中的元素进行匹配,如没有与之相匹配的,则为其申请空间,将其放入标识符表中。并输出其二元式。<3>若是数字开头,则可能是常量,因此进入numberprocess()进行识别。识别的过程为:将其与常量表charnum[20]中的元素进行匹配,如没有与之相匹配的,则为其申请空间,将其放入标识符表中。并输出其二元式。<4>否则进入otherprocess()识别当前是其它字符。在识别关系运算符的时候,有可能是两个字符为一个关系运算符,所以在识别的时候要判断连续的两个是否为一个关系运算符。(1)关键字:char*keyword[6]={"if","else","then","for","while","do"};(2)运算符和界符char*operatornum[16]={"+","-","*","/","<","<=",">",">=","!","=","{","}",";","(",")"}; //运算符和界符(3)常量表和标识符表char*num[20

词法分析器 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人iris028
  • 文件大小88 KB
  • 时间2020-10-23