词法分析器的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一.设计题目 (2)
二.设计要求 (2)
1. 词法分析器的定义 (2)
2. 设计要求 (2)
3. 本程序自行规定: (3)
三.设计作用与目的 (4)
1. 设计作用 (4)
2. 设计目的 (4)
四.运行环境及工具软件 (4)
五.系统设计 (5)
1. 系统总体设计 (5)
(1)词法分析器的设计 (5)
(2)总体设计框图 (6)
(3)总程序流程图 (6)
2. 各子模块设计 (8)
(1)字符的识别 (8)
(2)关键字的识别 (8)
(3)数字的识别 (8)
(4)界符的识别 (10)
(5)运算处理 (10)
3.相关函数分析 (11)
4. 源程序设计 (12)
六.实验调试结果 (29)
1. 调试工具 (29)
2. 调试步骤 (29)
3. 调试结果 (29)
七.设计中的问题及解决方法 (31)
八.设计心得 (32)
九.参考文献 (34)
词法分析器的设计与实现
一.设计题目
词法分析器的设计与实现
二.设计要求
1. 词法分析器的定义
词法分析顾名思义就是分词。它以程序设计语言编制的源程序作为输入,以单词序列作为输出。分词过程可以通过编制程序自动完成,我们通常称这个分词程序为词法分析器。词法分析器分析的源程序可以是现有的各类程序设计语言源程序也可以是人为给定的模型语言的源程序。本文中的源程序为后者。从词的角度来看,它涉及的内容较为简单,只包括几个较为常用的词类,词类的构成上也适当的作了一些简化。对词进行分析时,我们是按类型进行分析的。不同类型的词在后续的分析中所起的作用不同,相应的操作也各有不同,但同种类型中的词虽然单词的构成不同但从宏观上看它们的操作大体一致。模型语言中的单词可以分为“关键字”、“标识符”、“常数”、“分隔符”、“运算符”几类。一般,关键字在程序设计语言中人为给定
2. 设计要求
对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。另外,如果是算术表达式,则需要通过栈、运算符的优先级比较处理等从而计算出最终结果并显示。通过此次课程设计要求掌握从源程序文件中读取有效字符的方法,掌握词法分析的实现方法并上机调试编出的词法分析程序。
在处理表达式前,首先设置两个栈:一是运算符栈,用于在表达式处理过程中存放运算符。在开始时,运算符栈中先压入一个表达式结束符“#”。二是操作数栈,用于在表达式处理过程中存放操作数。然后从左到右依次读出表达式中的各个符号(运算符或操作数),每读出一个符号按以下原则进行处理:
(1)若读出的是操作数,则将该操作数压入操作数栈,并依次读入下一个符号。
(2)若读出的是运算符,则作进一步判断。
①若读出运算符的优先级大于运算符栈顶运算符的优先级,则将读出的运算符压
入运算符栈,并依次读下一个符号。
②若读出的是表达式结束符“#”,且运算符栈栈顶的运算符也是表达式结束符“#”,
则表达式处理结束,最后的计算结果在操作数栈的栈顶位置。
③若读出运算符的优先级不大于运算符栈栈顶运算任的优先级,则从操作数栈连
续退出两个操作数,并从运算符栈退出一个运算符,然后作相应的运算(运算符为刚从运算符栈退出的运算符,运算对象为刚从操作数栈退出的两个操作数),并将运算结果压入操作栈。
3. 本程序自行规定:
⑴关键字:"auto","break","case","char","const","continue",
"default","do","double","else","enum","extern",
"float","for","goto","if","int","long","return",
"short","signed","sizeof","static","struct","switch"……
⑵运算符:"+","-","*","/","="……
⑶界符:"{","}","[","]",";",",",".","(",")",":"
⑷数字:'0'~'9'
⑸其他标记如字符串,表示以字母开头的标识符。
⑹空格、回车、换行符跳过。
在屏幕上显示如下:
( +, 运算符)
( ;, 界符)
(auto , 关键字)
( 1 , 无符号整数)
( a , 普通标识符)
(continue , 关键字)
三.设计作用与目的
1. 设计作用
用高级语言编写一个词法分析器,使之能识别输入串,并把分析结果(单词符号,标识符,关键字等等)输出。输入源程序,输入单词符号,本词法分析器可以辨别关键字、标识符、常数、运算符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,这就是词法分析器的基本功能。当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号。当缓冲区里的字符串被处理完之后,它又调用预处理子程序来处理新串。
2. 设计目的
1)熟悉词法分析的基本原理,词法分析的过程,以及词法分析中要注意的一些问题;
2)通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;
3)复习高级语言,进一步加强用高级语言来解决实际问题的能力;
4)提高词法分析方法的实践能力;
5)理解如何理论联系实际以及明白理论与实际的差别。
四.运行环境及工具软件
Windows XP环境,Microsoft visual C++ 6.0版,512M内存,80G硬盘容量。
VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使C++的一个开发平台.有些软件就是这个编出来的vc++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。