词法分析实验报告.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档