计算机原理综合设计实验报告,编译原理课程设计实验报告——说明语句的词法分析器...

news/2024/6/18 5:26:33 标签: 计算机原理综合设计实验报告

内容简介:

一、设计目的

了解词法分析程序的基本构造原理,掌握词法分析程序的手工构造及自动构造方法。

二、设计内容

根据PASCAL语言的说明语句形式,用手工及自动方法构造一个对说明语句进行词法分析的程序。该程序能对从键盘输入或从文件读入的形如:

“const count=10,sum=81.5,char1=’f’,string1=”hj”, max=169;”

的常量说明串进行处理,分析常量说明串中各常量名、常量类型及常量值,并统计各种类型常量个数。

三、设计要求

1、输入的常量说明串,要求最后以分号作结束标志;

2、根据输入串或读入的文本文件中第一个单词是否为“const”判断输入串或文本文件是否为常量说明内容;

3、识别输入串或打开的文本文件中的常量名。常量名必须是标识符,定义为字母开头,后跟若干个字母,数字或下划线;

4、根据各常量名紧跟等号“=”后面的内容判断常量的类型。其中:字符型常量定义为放在单引号内的一个字符;字符串常量定义为放在双引号内所有内容;整型常量定义为带或不带+、- 号,不以0开头的若干数字的组合;实型常量定义为带或不带+、- 号,不以0开头的若干数字加上小数点再后跟若干数字的组合;

5、统计并输出串或文件中包含的各种类型的常量个数;

6、以二元组(类型,值)的形式输出各常量的类型和值;

7、根据常量说明串置于高级语言源程序中时可能出现的错误情况,模仿高级语言编译器对不同错误情况做出相应处理。

四、运行结果

1、输入如下正确的常量说明串:

const count=10,sum=81.5,char1=‘f’,max=169,str1=“h*54 2..4S!AAsj”, char2=‘@’,str2=“aa!+h”;

输出:

count(integer,10)

sum(float,81.5)

char1(char, ‘f’)

max(integer,169)

str1(string,“h*54 2..4S!AAsj”)

char2(char, ‘@’)

str2(string,“aa!+h”)

int_num=2; char_num=2; string_num=2; float_num=1.

2、输入类似如下的保留字const错误的常量说明串:

Aconstt count=10,sum=81.5,char1=‘f’;

输出类似下面的错误提示信息:

It is not a constant declaration

Please input a string again!

3、输入类似如下含常量名或常量值错误的常量说明串:

const count=10,12sum=81.5,char1=‘ff’,max=0016;

输出类似下面的错误提示信息:

count(integer,10)

12sum(Wrong! It is not a identifier!)

char1(Wrong! There are more than one char in ‘’.)

max(Wrong! The integer can’t be started with ‘0’.)

int_num=1; char_num=0; string_num=0; float_num=0.

4、其他类型的错误处理情况(略)。

五、提示

本课程设计重点有三个:一是作为常量名的标识符的识别;二是如何根据“=”后出现的内容来判断常量类型;三是对各种错误的处理。难点是对整型和实型常量的判断必须综合考虑多种可能情况。

提示:

用指针或数组与指针相结合来处理输入的常量说明串;

对整型和实型常量处理时,重点考虑常数中‘0’的位置。

六、分析与讨论

1、若考虑用E或e的科学计数法来表示整数和实数,应该如何实现?

2、若考虑布尔型常量,且规定其值只能为true或false,应该如何实现?

3、如何对手工构造的词法分析程序做进一步的优化,以提高代码质量和运行效率?

说明语句的词法分析器

【设计目的】

了解词法分析程序的基本构造原理,掌握词法分析程序的手工构造及自动构造方法。

【设计内容】

根据PASCAL语言的说明语句形式,用手工及自动方法构造一个对说明语句进行词法分析的程序。该程序能对从键盘输入或从文件读入的形如:

“const count=10,sum=81.5,char1=’f’,string1=”hj”, max=169;”

的常量说明串进行处理,分析常量说明串中各常量名、常量类型及常量值,并统计各种类型常量个数。

【设计要求】

1、输入的常量说明串,要求最后以分号作结束标志;

2、根据输入串或读入的文本文件中第一个单词是否为“const”判断输入串或文本文件是否为常量说明内容;

3、识别输入串或打开的文本文件中的常量名。常量名必须是标识符,定义为字母开头,后跟若干个字母,数字或下划线;

4、根据各常量名紧跟等号“=”后面的内容判断常量的类型。其中:字符型常量定义为放在单引号内的一个字符;字符串常量定义为放在双引号内所有内容;整型常量定义为带或不带+、- 号,不以0开头的若干数字的组合;实型常量定义为带或不带+、- 号,不以0开头的若干数字加上小数点再后跟若干数字的组合;

5、统计并输出串或文件中包含的各种类型的常量个数;

6、以二元组(类型,值)的形式输出各常量的类型和值;

7、根据常量说明串置于高级语言源程序中时可能出现的错误情况,模仿高级语言编译器对不同错误情况做出相应处理。

【算法思想】

本题是对PASCAL语言的说明语句的识别,PASCAL语言的说明语句形式由以下部分构成:

Const 变量名=变量值,变量名=变量值,……;

。。。。。。。。

【变量与函数说明】

1、变量定义:

char lexbuf[BUFSIZE]; //变量名数组

char token[BUFSIZE]; //变量值数组

int int_num=0,char_num=0, string_num=0, float_num=0; //不同类型的变量计数

2、函数声明:

void error(char *lexbuf,char *token):

对每组变量名和变量值进行错误检查,若无错误,则输出三元组结果;

。。。。。。。

【实验源代码】

/******************词法分析程序lex.c*******************/

#include ﹤stdio.h﹥

#include ﹤string.h﹥

#include ﹤ctype.h﹥

#define BUFSIZE 20 /* 定义缓冲区大小*/

char lexbuf[BUFSIZE]; //变量名数组

char token[BUFSIZE]; //变量值数组

int int_num=0,char_num=0, string_num=0, float_num=0; //不同类型的变量计数

/********对每组变量名和变量值进行错误检查,若无错误,则输出三元组结果**********/

void error(char *lexbuf,char *token)

。。。。。。。

【运行结果】

相关说明:

1. 如您下载的资料不止一份,建议您注册成为本站会员。会员请登录后下载。

2. 会员购买金币50元以下,0.7元/个,50元以上,0.5元/个。具体请看:下载与付款。

3. 会员48小时内下载同一文件,不重复扣金币。

4. 下载后请用WinRAR或WinZIP解压缩后使用。

5. 如仍有其他下载问题,请看常见问题解答。

下载地址:


http://www.niftyadmin.cn/n/739836.html

相关文章

计算机类写手是干什么的,计算机科学与技术属于什么类

写手网今天精心准备的是《计算机科学与技术属于什么类》,下面是详解!计算机科学与技术属于什么大类计算机科学与技术是属于工科计算机科学与技术类,计算机科学与技术及软件工程都是工科的一级学科。扩展资料计算机科学与技术是研究计算机的设…

阿语python4-1 django框架v5.0第1.11.2节 静态文件

项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径。静态文件可以放在项目根目录下,也可以放在…

计算机系统的环境变量,电脑path环境变量不见了怎么恢复_教你恢复电脑path环境变量的方法...

Path环境变量,作用是指定命令搜索路径,默认为Windows目录(C:\windows)和系统目录(C:\windows\system32),可以告诉系统在当前目录找不到所需文件时,就按path指定的路径查找。近期有网友留言说自己电脑path环境变量不见了&#xff0…

阿语python4-1 django框架v5.0第1.10节 展示书籍列表

实现步骤1.创建视图2.创建模板3.配置URLconf1.创建视图查询数据库数据构造上下文传递上下文到模板# 定义视图:提供书籍列表信息 def bookList(request):# 查询数据库书籍列表数据books BookInfo.objects.all()# 构造上下文context {books:books}# 数据交给模板处理…

文件档案软件测试,如何写软件测试的归档报告?

软件测试是产品研发的重要环节,虽然不似编程与设计那样复杂,但是软件测试非常注重工作流程以及归档总结。一般情况下软件测试之前需要根据软件的特性制定整体的测试计划,包括业务处理的过程以及整个软件测试的重点在哪里。然后还需要设计测试…

阿语python4-1 django框架v5.0第2.5节 shell工具和查看MySQL数据库日志

1 shell工具Django的manage工具提供了shell命令,帮助我们配置好当前工程的运行环境(如连接好数据库等),以便可以直接在终端中执行测试python语句。通过如下命令进入shellpython manage.py shell导入两个模型类,以便后续…

计算机与艺术联姻阶段,数字媒体艺术概论

幻觉艺术,或是多重合理空间组合的不合理性。.意识与潜意识:源于对超现实主义的理解,数字媒体艺术不但重视人类意识的思考,更重视潜意识的范畴,是一种超理性,超现实的艺术。.气氛铺陈:许多数字媒…

阿语python4-1 django框架v5.0第2.7.1节 基础条件查询

1 基本查询get查询单一结果&#xff0c;如果不存在会抛出模型类.DoesNotExist异常。all查询多个结果。count查询结果数量。>>> BookInfo.objects.get(id1) <BookInfo: 射雕英雄传>>>> BookInfo.objects.get(pk2) <BookInfo: 天龙八部>>>&g…