编译原理 无符号数识别程序设计
更新时间:2023-11-27 03:12:01 阅读量: 教育文库 文档下载
- 编译原理推荐度:
- 相关推荐
1. 2. 3. 4.
实验目的
设计无符号数识别程序 实验要求
无符号数的有穷自动机的实现
实验环境
VC++6.0 实验原理
1、无符号数的BNF描述如下:
0.<无符号数> ? d <余留无符号数> | . <十进制数> | e <指数部分> 1.<余留无符号数> ? d <余留无符号数> | . <十进制数> | e <指数部分> | ε
2.<十进制小数> ? d <余留十进制小数>
3.<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε 4.<指数部分> ? d <余留整指数> | + <整指数> | - <整指数> 5.<整指数> ? d <余留整指数> 6.<余留整指数> ? d <余留整指数> | ε 2、将G[<无符号数>]文法转换成有穷自动机。
3、构造状态矩阵;将有穷自动机的状S1 S2 ??Sn及输入的字a1 a2 ??am 构成一个n*m的矩阵。
1、状态矩阵设计出一个词法分析程序识别无符号数。 2、扫描无符号数,根据文法给出无符号数出错的位置。 3、工具:C语言或其它高级语言 4、实践时间:8学时
无符号数的有穷自动机实现的思想
用0-----表示无符号数; 用1-----表示余留无符号数; 用2----表示十进制小数;用3-----表示余留十进制小数; 用4-----表示指数部分; 用5-----表示整指数; 用6-----表示余留整指数。
输入无符号数序列,从左到右扫描,遇到“#”号结束扫描。设一个字符数
组,接收输入的无符号数,对输入的无符号数逐一进行分析,用一个中间变量接收当前字符。当前字符值发生错误时,输出错误信息;当前字符值正确时,分析下一个字符,反复判断,直至分析完毕。
3)无符号数的有穷自动机(Z表示结束符) 无符号数有穷自动机由图1所示。
0 1 2 3 4 5 6 d 1 1 3 3 6 6 6 e 4 4 Φ 4 Φ Φ Φ · 2 2 Φ Φ Φ Φ Φ + Φ Φ Φ 5 Φ Φ Φ - Φ Φ Φ Φ 5 Φ Φ ε Φ Z Φ Z Φ Φ Z 5.
软件设计与编程
#include
char wfh[50];/* 用于存放要判断的无符号数*/ int i,zf;
char ch1,ch2;
int index;//出错位置
int point;//小数点的个数标志 char c='y';
while (c=='y'||c=='Y') { printf(\Input Number:\ /*输入要判断的无符号数*/ scanf(\ 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=='$') /*如果是数字,则判断下一个字符是否是\,\,\ zf=1; /*输入为正确标志*/ else{ zf=0; /*输入为错误标志*/ index=i+2; break;//出错地方 } } else if(ch1=='.') { /*如果上面条件不符合,判断是否是小数点*/ if(point<1){ point++;//计算小数点的个数 if(ch2>='0'&&ch2<='9') /*判断小数点后是否是\,或为\,否则出错?*/ zf=1; else { zf=0; index=i+2; break; } } else{ zf=0; index=i+1; break; } } else if(ch1=='e'){ /*判断是否是指数标志*/ /*if(i==0) { zf=0;
index=i+1; break; }*/ if(ch2>='0' && ch2<='9'||ch2=='+'||ch2=='-') /*判断指数标志后是否是\,或是\,-\,\否则出错*/ zf=1; else if(ch2=='$'){ zf=0; index=i+1; break; } else{ zf=0; index=i+2; break; } } else if(ch1=='+' || ch1=='-'){/*如果以上不符,判断是否是\,-,\ if(i==0){ zf=0; index=i+1; break; } if(ch2>='0' && ch2<='9' || ch2=='$')/*\后只能为\否则出错*/ zf=1; else{ zf=0; index=i+2; break; } } else{ zf=0; index=i+1; break; } i++; /* i加1,判断下一个字符*/ } if(zf==0){ /*输入字符串不是无符号数*/ printf(\
} else printf(\/*输入字符串为无符号数*/ printf(\ scanf(\ }
return 0; }
6.
程序测试结果
正在阅读:
编译原理 无符号数识别程序设计11-27
难忘的抽奖活动作文400字07-06
辅助生产费用归集练习12-03
形容老年人的词语02-21
物理学发展历史08-16
关于访谈录的作文6篇04-01
评语09-18
法语谚语(完整版)08-20
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 号数
- 程序设计
- 编译
- 识别
- 原理