编译原理实验.docx

上传人:b****8 文档编号:30382636 上传时间:2023-08-14 格式:DOCX 页数:13 大小:138.75KB
下载 相关 举报
编译原理实验.docx_第1页
第1页 / 共13页
编译原理实验.docx_第2页
第2页 / 共13页
编译原理实验.docx_第3页
第3页 / 共13页
编译原理实验.docx_第4页
第4页 / 共13页
编译原理实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

编译原理实验.docx

《编译原理实验.docx》由会员分享,可在线阅读,更多相关《编译原理实验.docx(13页珍藏版)》请在冰豆网上搜索。

编译原理实验.docx

编译原理实验

 

《编译原理D》

实验指导书

专业计算机科学

班级计科1303

姓名徐秀峰

学号2013002038

指导老师冯秀芳

太原理工大学计算机科学与技术学院

2015年10月

 

《编译原理》实验

适用专业:

计算机实验类别:

专业实验

实验时数:

8学时

一、实验课程的性质、目的和任务

1.培养学生初步掌握编译原理实验的技能。

2.验证所学理论、巩固所学知识并加深理解。

3.对学生进行实验研究的基本训练。

二、实验课程的内容、要求及学时分配

实验一、无符号数的词法分析程序(4学时)

内容:

掌握词法分析的基本思想,并用高级语言编写无符号数的词法分析程序。

要求:

从键盘上输入一串字符(包括字母、数字等),最后以“;”结束,编写程序识别出其中的无符号数。

无符号数文法规则可定义如下:

<无符号数>→<无符号实数>│<无符号整数>

<无符号实数>→<无符号整数>.<数字串>[E<比例因子>]│

<无符号整数>E<比例因子>

<比例因子>→<有符号整数>

<有符号整数>→[+│-]<无符号整数>

<无符号整数>→<数字串>

<数字串>→<数字>{<数字>}

<数字>→0123......9

读无符号数的程序流程图见下图

实验源代码

#include

#include"stdafx.h"

#include

#include

#include

#include

#defineN100

charUnsignedNumber[N];

voidReadUnsignedNumber()

{

intw=0;

intp=0;

intj=0;

inti=0;

shorte=1;

shortd=0;

doubleDataValue;

while(isdigit(UnsignedNumber[i]))

{

d=UnsignedNumber[i]-48;

w=w*10+d;

i++;

}

if(UnsignedNumber[i]=='.')

{

i++;

while(isdigit(UnsignedNumber[i]))

{

d=UnsignedNumber[i]-48;

w=w*10+d;

j++;

i++;

}

if(UnsignedNumber[i]=='\0')

{

DataValue=w*powf(10,e*p-j);

printf("无符号数值是%f\n",DataValue);

}

else

 

if(UnsignedNumber[i]=='e'||UnsignedNumber[i]=='E')

{

i++;

if(UnsignedNumber[i]=='-')

{

e=-1;

i++;

}

else

if(UnsignedNumber[i]=='+')

{

i++;

}

do{

d=UnsignedNumber[i]-48;

p=p*10+d;

i++;

}while(isdigit(UnsignedNumber[i]));

DataValue=w*powf(10,e*p-j);

printf("无符号数值是%f\n",DataValue);

}

}

else

if(UnsignedNumber[i]=='e'||UnsignedNumber[i]=='E')

{

i++;

if(UnsignedNumber[i]=='-')

{

e=-1;

i++;

}

else

if(UnsignedNumber[i]=='+')

{

i++;

}

do{

d=UnsignedNumber[i]-48;

p=p*10+d;

i++;

}while(isdigit(UnsignedNumber[i]));

DataValue=w*powf(10,e*p-j);

 

printf("无符号数值是%f\n",DataValue);

}

else

{

DataValue=w;

printf("无符号数值是%f\n",DataValue);

}

if(errno==ERANGE)

{

printf("取值范围溢出!

\n");

}

}

intmain()

{

charch;

inti;

intflag=0;

printf("请输入一个符号串\n");

ch=getchar();/*扫描输入的字符串,从中提取无符号数字符串*/

while(ch!

=';')

{

i=0;

while(!

isdigit(ch))

{

if(ch==';')

{

break;

}

ch=getchar();

}

while(isdigit(ch))

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

}

if(ch=='.')

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

while(isdigit(ch))

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

}

if(ch=='e'||ch=='E')

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

if(!

isdigit(ch))

{

if(ch=='+'||ch=='-')

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

if(!

isdigit(ch))

{

i--;

UnsignedNumber[i]='\0';

}

else

{

do

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

}while(isdigit(ch));

if(ch=='.')

{

printf("输入错误!

\n");

exit

(1);

}

else

{

UnsignedNumber[i]='\0';

}

}

}

else

{

i--;

UnsignedNumber[i]='\0';

}

}

else

{

do

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

}while(isdigit(ch));

 

if(ch=='.')

{

printf("输入错误!

\n");

exit

(1);

}

else

{

UnsignedNumber[i]='\0';

}

}

}

else

{

UnsignedNumber[i]='\0';

}

}

else

if(ch=='e'||ch=='E')

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

if(!

isdigit(ch))

{

if(ch=='+'||ch=='-')

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

if(!

isdigit(ch))

{

i--;

UnsignedNumber[i]='\0';

}

else

{

do

{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

}while(isdigit(ch));

if(ch=='.')

{

printf("输入错误!

\n");

exit

(1);

}

else

{

UnsignedNumber[i]='\0';

}

}

}

else{

UnsignedNumber[i]='\0';

}

}

else{

do{

UnsignedNumber[i]=ch;

i++;

ch=getchar();

}while(isdigit(ch));

if(ch=='.')

{

printf("输入错误!

\n");

exit

(1);

}

else{

UnsignedNumber[i]='\0';

}

}

}

else{

UnsignedNumber[i]='\0';

}

if(i!

=0)

{

ReadUnsignedNumber();

flag=1;

}

if(flag==0)

{

printf("没有无符号数!

\n");

}

}

return0;

}

实验截图

·

·

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1