130242014018-郑志良-第2次实验
一、实验目的
1.熟悉体系结构的风格的概念
2.理解和应用管道过滤器型的风格。
3、理解解释器的原理
4、理解编译器模型
二、实验环境
硬件:
软件:Python或任何一种自己喜欢的语言
三、实验内容
1、实现“四则运算”的简易翻译器。
结果要求:
1)实现加减乘除四则运算,允许同时又多个操作数,如:2+3*5-6 结果是11
2)被操作数为整数,整数可以有多位
3)处理空格
4)输入错误显示错误提示,并返回命令状态“CALC”
图1 实验结果示例
加强练习:
1、有能力的同学,可以尝试实现赋值语句,例如x=2+3*5-6,返回x=11。(注意:要实现解释器的功能,而不是只是显示)
2、尝试实现自增和自减符号,例如x++
2、采用管道-过滤器(Pipes and Filters)风格实现解释器
图2 管道-过滤器风格
图 3 编译器模型示意图
本实验,实现的是词法分析和语法分析两个部分。
四、实验步骤:
#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"
int n=0;
char record[20];
float product();
float change();
float muli()
{
float summ;
summ=product();
while(record[n]=='-'||record[n]=='+')
{
switch(record[n])
{
case '+':n++;summ+=product();break;
case '-':n++;summ-=product();break;
}
}
return summ;
}
float product()
{
float sump;
sump=change();
while(record[n]=='*'||record[n]=='/')
{
switch(record[n])
{
case '*':n++;sump*=change();break;
case '/':n++;sump/=change();break;
}
}
return sump;
}
float change()
{
float sumc;
char rec[20],i=0;
if(record[n]=='(')
{
n++;
sumc=muli();
}
if(record[n]==')')
n++;
while(isdigit(record[n])||record[n]=='.')
{
while(isdigit(record[n])||record[n]=='.')
rec[i++]=record[n++];
rec[i]='\0';
sumc=atof(rec);
}
return sumc;
}
void main()
{
while(1)
{
n=0;
scanf("%s",record);
printf("%s=%g\n",record,muli());
}
}
对应结构图:
五、实验总结
转载于:https://www.cnblogs.com/zzl1/p/7748750.html
130242014018-郑志良-第2次实验相关推荐
- matlab数学实验 胡良剑,matlab数学实验习题全部答案(胡良剑)
matlab数学实验习题全部答案(胡良剑) 1数学实验答案%Page20,ex1 (5) 等于[exp(1),exp(2);exp(3),exp(4)] (7) 3=1*3, 8=2*4 (8) a ...
- 猫眼CEO郑志昊:为什么说产品思维已“死”?
前不久,猫眼娱乐举行了全文娱战略升级,猫眼CEO郑志昊表示,猫眼起始于票务,发展于电影,但不止于电影.郑智昊发布了"猫爪模型",底下五个平台分别是:票务平台.产品平台.数据平台.营 ...
- 郑志远的java学习笔记
郑志远的java学习笔记 郑志远 CCB 1 Java起源 略 2 Java语言概述 1.面向对象编程的3个原则:封装(encapsulation).继承(inh ...
- 猫眼郑志昊:互联网没有价值网,就没有下半场
下半场,这个词已经有些老套,虽然是互联网正在进行时. 三年前美团CEO王兴喊出时,有些生僻甚至无法理解.但当互联网巨无霸BAT纷纷着眼产业互联网,当TMD从流量争夺转向用户精细化运营,当曾经风靡一时的 ...
- 计算机电路基础张志良,计算机电路基础
图书简介 配套资源:电子课件 本书特色: ★ 金牌作者编写,专门针对计算机专业设计教学内容 ★ 内容广.难度浅.适用面宽 ★ 配有<学习指导与习题解答>(ISBN 978-7- 111- ...
- 运筹学与最优化MATLAB编程--郑志勇 出版
(购买)运筹学与最优化MATLAB编程 (程序下载)运筹学与最优化MATLAB编程(程序)OR&Opt-matlab code <运筹学与最优化MATLAB编程>主要包括线性规划. ...
- 趋势分析与假设检验的“惯性大小”——数量投资的规则思考(by 郑志勇)
趋势分析与假设检验 市场有着庞大的历史数据(行情数据,企业利润,宏观数据等等),在分析这些数据的时候,或者用更时尚的说法用数理统计与数据挖掘的方法对数据进行深入的加工,或许可以获得到令人兴奋的结果,使 ...
- 运筹学与最优化matlab编程,运筹学与最优化MATLAB编程 教学课件 ppt 作者 吴祈宗 郑志勇 第8章.ppt...
8.5 lsqcurvefit函数(求解非线性数据拟合问题) 函数输出: X:最优点(或者迭代停止点) Resnorm:残差平方和norm(C*x-d)^2 Residual:残差C*x-d向量 Ex ...
- 志良电子关于LED控制卡显示内容上下行有虚点的问题研究(一)
问题描述: 在调试一块LED控制板时发现在显示的内容上下行,根据显示内容应该是熄灭的LED灯却亮着,亮度比正常显示的LED灯低很多. 调试过程: LED显示相关函数如下,LED屏为单色屏,1/16扫描 ...
最新文章
- React 项目----内联样式style的使用 (12)
- WP8.1学习系列(第二十五章)——控件样式
- python怎么定义空矩阵_python 空矩阵
- boost::multi_array模块index_base 修改工具的测试
- mysql联合索引顺序调整_MySQL 关于联合索引的字段顺序规则讨论
- 杭州软件测试培训有用吗,杭州软件测试培训靠谱吗
- faster-rcnn tensorflow windows python 训练自己数据
- 微商如何打印电子面单
- 怎么看电脑配置高不高_辣椒产量高不高?关键看播种前的种子处理,你知道怎么做吗?...
- 【转】接口测试面试题
- k touch for android,k touch for android
- Spring Cloud 微服务
- 云通信-腾讯云,TLS独立模式公私钥生成
- tortoise git revert的坑
- 根据26字母排列来搜索排列全国城市
- 【新手案例】Python3.7如何获取网络时间
- 双摄像头实时视频拼接(平移模型)
- 计算机硬盘启动改u为盘启动不了,如果计算机BIOS启动项找不到硬盘应该怎么办...
- 十一月 Z 星月度速览 | 个性化推荐技术解读、Mivus demo 服务框架切换缘解、精选好书推荐、AI 收藏夹……...
- DDOS防御抗D平台方案
热门文章
- 闪亮蔚蓝_在R中构建第一个闪亮的Web应用
- 配对交易方法_COVID下的自适应配对交易,一种强化学习方法
- 古代的房价跟现在比怎么样?50万能在唐朝买个茅厕吗?
- OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)
- influxdb数据过期_Influxdb Cluster下的数据写入
- python中str和int区别_python中eval与int的区别浅析
- 艾为数字ic面试题_每日学习:数字后端面试100问(2019全新版)
- html文本设置float,css怎么float(浮动)?
- mysql数据库整体备份和恢复_MySQL 数据库的备份和恢复
- python3项目源代码下载_2019年最值得关注的34个Python开源项目——Let's go!