您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 编译原理-无符号数识别程序设计
1.实验目的设计无符号数识别程序2.实验要求无符号数的有穷自动机的实现3.实验环境VC++6.04.实验原理1、无符号数的BNF描述如下:0.无符号数d余留无符号数|.十进制数|e指数部分1.余留无符号数d余留无符号数|.十进制数|e指数部分|ε2.十进制小数d余留十进制小数3.余留十进制小数e指数部分|d余留十进制小数|ε4.指数部分d余留整指数|+整指数|-整指数5.整指数d余留整指数6.余留整指数d余留整指数|ε2、将G[无符号数]文法转换成有穷自动机。3、构造状态矩阵;将有穷自动机的状S1S2……Sn及输入的字a1a2……am构成一个n*m的矩阵。1、状态矩阵设计出一个词法分析程序识别无符号数。2、扫描无符号数,根据文法给出无符号数出错的位置。3、工具:C语言或其它高级语言4、实践时间:8学时无符号数的有穷自动机实现的思想用0-----表示无符号数;用1-----表示余留无符号数;用2----表示十进制小数;用3-----表示余留十进制小数;用4-----表示指数部分;用5-----表示整指数;用6-----表示余留整指数。输入无符号数序列,从左到右扫描,遇到“#”号结束扫描。设一个字符数组,接收输入的无符号数,对输入的无符号数逐一进行分析,用一个中间变量接收当前字符。当前字符值发生错误时,输出错误信息;当前字符值正确时,分析下一个字符,反复判断,直至分析完毕。3)无符号数的有穷自动机(Z表示结束符)无符号数有穷自动机由图1所示。de·+-ε0142ΦΦΦ1142ΦΦZ23ΦΦΦΦΦ334Φ5ΦZ46ΦΦΦ5Φ56ΦΦΦΦΦ66ΦΦΦΦZ5.软件设计与编程#includestdio.h#includestring.hintmain(){charwfh[50];/*用于存放要判断的无符号数*/inti,zf;charch1,ch2;intindex;//出错位置intpoint;//小数点的个数标志charc='y';while(c=='y'||c=='Y'){printf(PleaseInputNumber:);/*输入要判断的无符号数*/scanf(%s,wfh);strcat(wfh,$);/*自动在输入的串末尾加入$结束符*/i=0;zf=0;/*初始时令zf=0,使得如果输入全不符合时退出*/point=0;while(wfh[i]!='$'){/*条件:输入不为结束符时执行判断*/ch1=wfh[i];/*将第一个字符送入变量ch1*/ch2=wfh[i+1];/*将次输入的字符送入变量ch2*/if(ch1='0'&&ch1='9'){/*当前字是否0-9的数字*/if((ch2='0'&&ch2='9')||ch2=='.'||ch2=='e'||ch2=='$')/*如果是数字,则判断下一个字符是否是0-9,.,E.$*/zf=1;/*输入为正确标志*/else{zf=0;/*输入为错误标志*/index=i+2;break;//出错地方}}elseif(ch1=='.'){/*如果上面条件不符合,判断是否是小数点*/if(point1){point++;//计算小数点的个数if(ch2='0'&&ch2='9')/*判断小数点后是否是0-9,或为$*,否则出错?*/zf=1;else{zf=0;index=i+2;break;}}else{zf=0;index=i+1;break;}}elseif(ch1=='e'){/*判断是否是指数标志*//*if(i==0){zf=0;index=i+1;break;}*/if(ch2='0'&&ch2='9'||ch2=='+'||ch2=='-')/*判断指数标志后是否是0-9,或是+,-,$,否则出错*/zf=1;elseif(ch2=='$'){zf=0;index=i+1;break;}else{zf=0;index=i+2;break;}}elseif(ch1=='+'||ch1=='-'){/*如果以上不符,判断是否是+,-,*/if(i==0){zf=0;index=i+1;break;}if(ch2='0'&&ch2='9'||ch2=='$')/*+,-后只能为0-9,否则出错*/zf=1;else{zf=0;index=i+2;break;}}else{zf=0;index=i+1;break;}i++;/*i加1,判断下一个字符*/}if(zf==0){/*输入字符串不是无符号数*/printf(Inputnumberareerrorat%d!\n,index);}elseprintf(Inputnumberareright!\n);/*输入字符串为无符号数*/printf(Doyouwanttoinputagain?(YorN)\n);scanf(%s,&c);}return0;}6.程序测试结果
本文标题:编译原理-无符号数识别程序设计
链接地址:https://www.777doc.com/doc-7829800 .html