- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
洛阳理工学院实验报告
院部
计算机系
班级
B150402
学号
姓名
课程名称
编译原理
实验日期
2018.6.4
实验名称
词法分析器
成绩
实验目的:
加深对词法分析过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析;能够使自己编写的程序对简单的程序片段进行词法分析。
实验条件:
装有Windows操作系统,Microsoft Visual C++ 6.0。
实验内容:
自定义一种程序设计语言,或选择已有的一种高级语言(C语言),编制它的词法分析程序。
实验要求:
1.对单词的构成规则有明确的定义
2.编写的程序能够正确识别源程序中的单词符号
3.识别出的单词以种别码,值的形式保存在符号表中
4.词法分析中源程序和分析后的符号表均保存在.txt文件中
5.有一定的检查错误的能力。遇到错误时可显示“Error”,然后跳过错误部分继续显示。
6. 实验报告包括以下内容
(1)编程思路、流程图、源代码
(2)上机调试时发现的问题,以及解决的过程
(3)所使用的测试数据及结果
(4)心得体会
实验步骤
1.给出目标语言的所有单词符号及种别编码、单词符号的状态转换图。
2.依次读入源程序,对源程序进行单词切分和识别,直到源程序结束。
3.对正确的单词,按照它的种别以种别码,值的形式保存在符号表中。
4.对不正确的单词,做出错误处理。
实验内容:
1.编程思路:
1.1、实现预处理功能
源程序中可能包含有对程序执行无意义的符号,要求将其剔除。
首先编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);然后编制一个预处理子程序,去掉输入串中的回车符、换行符和跳格符等编辑性文字;把多个空白符合并为一个;去掉注释。
1.2、实现词法分析功能
输入:所给文法的源程序字符串。
输出:将每个单词或数字以及他对应的种别码和类型输出到文件中。
具体实现时,可以将单词的二元组用结构进行处理。
1.3、待分析的C语言子集的词法
1)关键字 char,int,if,else,var ,return,break,do,while,for,double,float,short
2)运算符和界符
+ - * / = = = ; ( ) [ ] \ | { } \\ #
3)空格由空白、制表符和换行符组成
空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。
1.4、各种单词符号对应的种别码
表1 各种单词符号的种别码
单词符号
种别码
char
1
int
2
if
3
else
4
var
5
return
6
break
7
do
8
while
9
for
10
double
11
float
12
short
13
标识符
14
数字
15
符号
16-40
1.5、 词法分析程序的主要算法思想
算法的基本任务是从文件中读出字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号,并输出到文件中。
2.流程图:
2.1主程序流程图
是
是
否
输入串结束
输入编译后的文件名
调用分析子程序
结束
开始
输入打开的文件名
关闭文件
文件为空?
是
输入串结束
是
主函数流程图
2.2分析函数流程图
否
否
否
是
否
是
符号
字母
数字
否
是
返回0
变量初始化
忽略空格
是否文件结束
获取一个单词
获取数字
在文件中写入当前单词以及对应的关键字种别码
获取一个完整符号
返回
开始
在文件中写入当前单词以及对应的符号种别码
在文件中写入当前单词以及对应的符号种别码
在文件中写入当前单词以及标识符种别码12
将当前单词添加到标识符表中
存在于数字表
存在于标识符表
存在于符号表
存在于关键字表
是
将当前数字添加到数字表中
将当前符号添加到符号表中
是
分析函数流程图
3.源代码:
#includestdio.h
#includeconio.h
#includemath.h
#includestring.h
#includestdlib.h
int i, row = 0, line = 0;
char a[1000]; //程序
int number[1000][100]; //常数表
char mark[100][5]; //标识符表
FILE *fin,*fout;
//词法分析
int wordanalysis()
{
if ((a[i] = Aa[i] = Z)||(a[i]=aa[i]=z)) //分析标识符和关键字
{
char word[10];
ch
文档评论(0)