词法分析的设计与实现.doc
- 文档编号:188398
- 上传时间:2022-10-05
- 格式:DOC
- 页数:16
- 大小:146KB
词法分析的设计与实现.doc
《词法分析的设计与实现.doc》由会员分享,可在线阅读,更多相关《词法分析的设计与实现.doc(16页珍藏版)》请在冰豆网上搜索。
题目词法分析的设计与实现
学院
专业名称计算机科学与技术
姓名
导师姓名
2010年12月
目录
1.课程设计的目的………………………………………………………………1
2.课程设计的内容………………………………………………………………1
3、课程设计的要求………………………………………………………………1
4.课程设计报告内容……………………………………………………………1
4.1设计功能分析……………………………………………………………1
4.2设计思路…………………………………………………………………1
4.3正规文法…………………………………………………………………2
4.4状态图…………………………………………………………………3
4.5设计词法分析算法代码…………………………………………………5
4.6基本测试数据……………………………………………………12
4.7结果截图………………………………………………………12
5.设计体会………………………………………………………………12
6.参考文献………………………………………………………………………13
7.思考题………………………………………………………………………13
词法分析的设计与实现
一、课程设计的目的
1、基本掌握计算机语言的词法分析程序的开发方法。
2、实现一个词法分析程序,将字符串流分解成终结符流供语法分析使用。
3、通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。
并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
4、了解当前常用的软件开发工具VisualC++,熟练掌握基于MFC的程序设计,培养解决实际问题的能力。
5、对C语言和数据结构的进一步巩固加深。
二课程设计的内容
编制一个能够分析三种数、标识符、主要运算符、分隔符和主要关键字的词法分析程序。
三、课程设计的要求
1.根据以下的正规式,编制正规文法,画出状态图;
标识符 <字母>(<字母>|<数字字符>)*
十进制数(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(ε|.)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*
八进制数0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*(ε|.)(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*
十六进制0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*(ε|.)
(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*
运算符和分隔符 + - * / > < = ( ) ;
关键字 if then else while do
2.根据状态图,设计词法分析函数intscan(),完成以下功能:
1)从键盘读入数据,分析出一个单词。
2)返回单词种别(用整数表示),
3)返回单词属性(不同的属性可以放在不同的全局变量中)。
3.编写测试程序,反复调用函数scan(),输出单词种别和属性。
四、课程设计报告内容
4.1、设计功能分析
程序能够从左到右一个字符一个字符地读入源程序,并对构成的源程序的字符流进行扫描和分解,从而识别出一个个单词,并给出单词的种别和属性。
4.2、设计思路
主函数main()的思想:
先输入一串字符,将字符串用空格打断,若是分隔出的单元不为空,则对此单元继续分析,根据所输入的字符串判断出是标识符、八进制数、十进制数、十六进制数、运算符、分隔符还是关键字,然后赋予那单词的种别和属性。
4.3、正规文法
对于十进制数:
A1——>B1C1
B1——>D1B1|ε
C1——>E1B1
E1——>ε|.
D1——>0|1|2|3|4|5|6|7|8|9
对于八进制数:
A2——>0B2
B2——>C2D2
C2——>E2F2
E2——>1|2|3|4|5|6|7
F2——>GF|ε
D2——>H2F2
H2——>ε|.
D2——>1|2|3|4|5|6|7
G2——>0|1|2|3|4|5|6|7
对于十六进制:
A3——>0xB3
B3——>C3D3
C3——>E3C3|ε
E3——>0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f
D3——>F3C3
F3——>ε|.
对于运算符和分隔符:
A4——>+|-|*|/|>|<|=|(|)|;
对于标识符和关键字:
A5——>B5C5
B5——>D5E5
D5——>a|b|……|y|z
E5——>F5E5|ε
F5——>a|b|……|y|z|0|1|2|3|4|5|6|7|8|9
C5——>G5E5
G5——>ε|.
综上正规文法为:
S——>A1|A2|A3|A4|A5
A1——>B1C1
B1——>D1B1|ε
C1——>E1B1
E1——>ε|.
D1——>0|1|2|3|4|5|6|7|8|9
A2——>0B2
B2——>C2D2
C2——>E2F2
E2——>1|2|3|4|5|6|7
F2——>GF|ε
D2——>H2F2
H2——>ε|.
D2——>1|2|3|4|5|6|7
G2——>0|1|2|3|4|5|6|7
A3——>0xB3
B3——>C3D3
C3——>E3C3|ε
E3——>0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f
D3——>F3C3
F3——>ε|.
A4——>+|-|*|/|>|<|=|(|)|;
A5——>B5C5
B5——>D5E5
D5——>a|b|……|y|z
E5——>F5E5|ε
F5——>a|b|……|y|z|0|1|2|3|4|5|6|7|8|9
C5——>G5E5
G5——>ε|.
4.4、状态图
0…7
0
*
0….9/a…z/A…Z
1…9
0…9
其他
开始
空白
a….z/A…Z
0
2
3
4
6
9
其他
。
0…9
非数字
。
0…7
非o..7且非。
1
100
0…7
非o..7
。
。
7
5
8
12
11
13
1…9/a….f/A…F
14
非1….9且非a...f且非A...F
15
0….9/a...f/A...F
16
非0….9且非a...f且非A...F
。
17
。
0
18
19
0
+/-/…/;
If/while/then/do
x/X
4.4设计词法分析算法代码:
#include
#include
#include"stdafx.h"
unionchars{//联合,可存储字符串,整型和浮点型
charpro_char[15];
intpro_number;
floatreal;
};
structdata{//将每个单元用一个结构来存储,其内容包括:
类型,所属的具体类型,以及属性值
charkind[7];
intid;
unioncharspro;
};
intscan(char*a);//对每个用空格打断的单元进行进一步的分析,对其进行进一步的分类
voidPrints(chara[15],intid,inta_long);//将分析后的每个token输出
voidsave(char*a,intid,intx);//将分析后的结果保存到一个结构数组中
charnowChar[15];//临时的存储单元,用来存储被空格打断以后单元
char
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析 设计 实现