实验一词法分析器设计和Lex工具的使用

发布时间:2019-02-14 19:23:28   来源:文档文库   
字号:

实验一 词法分析器设计和Lex工具的使用

一.实验目的:

1、掌握词法分析器设计方法。

2熟悉LEX工具的使用,理解LEX工具的工作原理和利用LEX工具设计词法分析器的方法。

二.实验内容以下实验内容完成13项中任意项即可)

1、在VC下打开阅读附件一mlex.dsw,阅读工程一mlexmlex2源程序,mlex为课本P45词法分析器的实现,工程二mlex2采用另一种方式实现P45的状态转换图。通过该例了解状态自动机的实现方法和手工编写词法分析器的基本方法。

Mlex词法分析器简单说明:

功能:

从左至右逐个字符地对c语言子集源程序src.txt进行扫描,产生单词符号流token.txt(参见课本,单词用二元组<单词种别,单词值>表示)

程序框图:

输入

c语言子集源程序,为文本文件。注意读到文件结束符EOF意味着分析结束。

输出

词法分析程序的运行结果是:输出一个单词序列(屏幕显示或保存在文件中)和一个常数表、一个符号表(保存在文件中)、一个常数表(保存在文件中),并输出错误信息。

说明:

单词序列:读入源程序,每从源程序中发现一个符号串构成一个单词,即输出一个二元式(单词种别,单词值)。其中单词种别用整数说明。标识符的单词值为其在符号表中的记录号。非负整常数的单词值为其在常数表中的记录号。

符号表:存放标识符的具体信息,记录格式为(记录号,构成标识符的字符串)。相同的标识符在符号表中只登录一个记录。

常数表:存放非负整数的具体信息,记录格式为(记录号,构成非负整数的字符串)。相同的非负整数在符号表中只登录一个记录。

标识符的识别:见下例,分析abc后,应在符号表中登录一项(1,abc),并往单词序列中加一项(6,1),表示单词种别为标识符<6>,单词的具体信息见符号表第1个记录。

常数的识别:见下例,分析134后,应在常数表中登录一项(1,134),并往单词序列中加一项(7,1),表示单词种别为常数<7>,单词的具体信息见常数表第1个记录。

例:运行词法分析程序

程序输入源程序src.txt(见下)

abc=134

if (abc==5)

d=c+1

程序输出显示:

符号表:

(1,abc)(2,d)(3,c)

常数表:

(1,134)(2,5)(3,1)

单词序列: (6,1)(12,-)(7,1)(2,-)(14,-)(6,1)(11,3)(7,2)(15,-)(6,2)(12,-)(6,3)(8,-)(7,3)

注意:实际输出的单词序列中的单词编码也许和以上不同,以相应工程lex.h的定义为准。

问题:如何在附件工程一/或工程二的原程序的基础上添加代码,实现浮点数和更多关键字的识别。(假设浮点数的结构为 “数字串1.数字串2”,数字串1长度>0, 数字串2长度>=0

2、阅读flex.man和《lexyacc工具介绍.doc》关于lex工具使用方法这部分内容,掌握lex工具的基本使用方法和工作原理。

3、在VC下打开阅读附件一mlex.dsw,阅读工程三mlex3源程序lex.lmlex.c mlex3采用lex工具实现课本P45词法分析器。通过该例了解利用lex工具设计词法分析器的基本方法。

问题:如何在原lex.l程序的基础上修改,使词法分析程序能识别更多的单词和浮点数。

三.实验报告要求:

1、实验报告要求记录实验目的、实验步骤和实验结果。

2、按实验内容要求记录实验步骤和结果:如修改了原程序,记录程序修改部分代码即可。

本文来源:https://www.2haoxitong.net/k/doc/ebb6eaf200f69e3143323968011ca300a7c3f665.html

《实验一词法分析器设计和Lex工具的使用.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式