- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
软件学院实验卡和实验报告
学号: xxxxxxx 姓名: xxx 年级专业班级:xxxxx
xxx 实验室 组别: 实验日期:xxxxx 年 xx 月 xx 日
课程名称 编译原理 实验课时 4
实验名称和序号
词法分析
同组者
2
姓 名
(1)理解词法分析在编译程序中的作用;
实验目的 (2)加深对有穷自动机模型的理解;
(3)掌握词法分析程序的实现方法和技术。
实验环境
实验内容和原理
软件环境:MicrosoftVisualStudio6.0;
硬件环境:Windows2000操作系统。
对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。主要用到编译原理课程中有穷自动机模型的原理。
输入待分析的字符串。
实验步骤方法关键代码
语法如下:
关键字:begin,if,then,while,do,end.
b.运算符和界符::=+-*/===;()#
c.其他单词是标识符(ID)和整形常数(NUM):ID=letter(letter|digit)*,NUM=digitdigit*
d.空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。
扫描字符串。
在扫描源程序字符串时,一旦识别出关键字、运算符、界符、标识符和整形常数中之一,即以单词形式(各类单词均采用相同的结构,即二元式编码形式)输出。它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。
关键步骤如下:
文件操作:
用ifstream的对象fin打开input.txt文件,将分析得到的单词存入output.txt中,不能识别的字符存入error.txt中。之后关闭输入文件、输出文件、错误信息记录文件。
ifstreamfin(input.txt,ios::nocreate);//用ifstream打开文件,文件不存在时,
不会创建。
匹配和回退操作:if(ch==:){
fin.get(ch);
if(ch===)fout(18,:=)endl;
else{
((接上页)
实验步骤方法关键代码
fout(17,:)endl;
fin.seekg(-1,ios::cur);//回退一个字符}
}
如果当前读入的是“:”,下一个读入的是“=”,则输出(:=,18),下一个字符不是“=”,则回退一个字符,输出(:,17)。
输出二元组(syn,token或sum)构成的序列,并将不能识别的字符串保存在
错误信息表。
syn为单词种别码;
token为存放的单词自身字符串;sum为整形常数。
在源程序目录(..\LexAnalise2)下新建iuput.txt的文本文件,内容为beginx:=9;if
测试记录 x0thenx:=2*x+1/3;end#。运行程序后,在源程序目录下生成了两个新的文件:
分 析
结 论 output.txt和error.txt。output.txt,内容为:(1,begin)(10,’x’)(18,:=)(11,9)(26,;)(2,if)……,error.txt中没有内容。
如果用户没有建立
如果用户没有建立input.txt的文件,程序运行时提示:“找不到文件” ,此时,
output.txt和error.txt中没有内容。
用户输入的单词在单词表中找不到,则保存在错误表(error.txt)中。
通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分
小
结
析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理。另外,也让我重新
熟悉了C++语言的相关内容,加深了对C++语言的用途的理解。
以下由实验教师填写
记 事
评 议
成绩评定
平时成绩
实验报告成绩
综合成绩
指导教师签名:
附录
1
1
总体设计图
读入字符流
临时字符串
[字母]
写入临时字符串
[字母或数字]
临时字符串入符号表
[数字]
写入临时字符串
[数字]
临时字符串入符号表
[“+”或“-”或“*”或“/”或“
写入临时字符
临时字符串
程序功能
操作实例
例如:对源程序beginx:=9;ifx0thenx:=2*x+1/3;end#
首先在源程序目录(..\LexAnalise2)下新建iuput.txt的文本文件,内容为beginx:=9;ifx0thenx:=2*x+1/3;end#。
运行程序,如下图所示。
在源程
文档评论(0)