C++桌面计算机
#include<iostream>
#include<string>
#include<map>
#include<cctype>
using namespace std;
enum Token_value{
NAME, NUMBER, END,
PLUS='+', MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=')',
};
Token_value curr_tok=PRINT;
double number_value;
string string_value;
map<string,double>table;
int no_of_errors;
double error(const string& s)
{
no_of_errors++;
cerr<<"error:"<<s<<'\n';
return ;
}
//==============================================================================
Token_value get_token()
{
char ch=;
cin>>ch;
switch(ch){
case :
return curr_tok=END;
case';':
case'*':
case'/':
case'+':
case'-':
case'(':
case')':
case'=':
return curr_tok=Token_value(ch);
case'':case'':case'':case'':case'':case'':
case'':case'':case'':case'':case'.':
cin.putback(ch);
cin>>number_value;
return curr_tok=NUMBER;
default:
if(isalpha(ch)){
cin.putback(ch);
cin>>string_value;
return curr_tok=NAME;
}
error("bad token");
return curr_tok=PRINT;
}
}
//==============================================================================
double expr(bool);
double prim(bool get)
{
if(get)get_token();
switch(curr_tok){
case NUMBER:
{ double v=number_value;
get_token();
return v;
}
case NAME:
{ double&v=table[string_value];
if(get_token()==ASSIGN)v=expr(true);
return v;
}
case MINUS:
return -prim(true);
case LP:
{ double e=expr(true);
if(curr_tok!=RP)return error(")expected");
get_token();
return e;
}
default:
return error("primary expected");
}
}
//==============================================================================
double term(bool get)
{
double left=prim(get);
for(;;)
switch(curr_tok){
case MUL:
left*=prim(true);break;
case DIV:
if(double d=prim(true)){
left/=d;break;
}
return error("divide by 0");
default:
return left;
}
}
//==============================================================================
double expr(bool get)
{
double left=term(get);
for(;;)
switch(curr_tok){
case PLUS:
left+=term(true);break;
case MINUS:
left-=term(true);break;
default:return left;
}
}
//==============================================================================
int main()
{
table["pi"]=3.1415926535897932385;
table["e"]=2.7182818284590452354;
while(cin){
get_token();
if(curr_tok==END)break;
if(curr_tok==PRINT)continue;
cout<<expr(false)<<'\n';
}
return no_of_errors;
}
C++桌面计算机的更多相关文章
- 【搬砖】安卓入门(1)- Java开发入门
01.01_计算机基础知识(计算机概述)(了解) A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代 ...
- Google 地图 API V3 针对移动设备进行开发
Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...
- 【Python①】python简介,安装以及配置
今天开始学习python,将一些心得和知识点记录下来,如有疏漏或表达问题,欢迎指正.后面所有代码均为Python 3.3.2版本(运行环境:Windows7)编写. 附:2014年8月TIOBE编程语 ...
- Windows系统
1. 更改XP登录界面 怎样启用XP的经典登录界面 第一步:用管理员账号登录系统. 第二步:运行gpedit.msc启动组策略编辑器,找到"计算机配置"--"管理模板&q ...
- 深入理解Oracle的并行操作-转载
转载:http://czmmiao.iteye.com/blog/1487568 并行(Parallel)和OLAP系统 并行的实现机制是:首先,Oracle会创建一个进程用于协调并行服务进程之间的信 ...
- iOS 实现app文件共享
解决方式如下,在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES.将您希望共享的文件放在应用程序的Documents目录.一旦设备插入到用户计算 ...
- 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程
第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...
- C# 中 SQLite 使用介绍
关于SQLite SQLite是一款轻型的嵌入式的遵守ACID的关系型数据库管理系统,诞生已有15个年头了.随着移动互联的发展,现在得到了更广泛的使用. 在使用SQLite之前,我们势必要先了解它一些 ...
- iPhone SDK 包含哪些东西?
iPhone SDK 包含哪些东西? 本文转载自:http://www.cnblogs.com/jy578154186/archive/2013/02/27/2934881.html 第一部分: 在使 ...
随机推荐
- app消息推送
Mui + 个推 实现消息推送 1.首先去个推 注册一个账号,新建一个消息推送应用 2.配置Mui配置文件 3.使用HBuilder 打包 app 4.然后在到个推后台 发送数据 后台Java代码(官 ...
- Net Framework,Net Core 和 Net Standard 区别
前几天我在一个群里看到有关这方面的讨论,最后感觉讨论的不是很清晰,有幸的是我们的项目去年就开始迁移NetCore的调研了,我个人多多少少也是有过这方面的研究.下面我将说一下我自己对着三个的认识如果有不 ...
- Vim任意代码执行漏洞(CVE-2019-12735)
Vim通过Modelines执行任意代码 漏洞概要: 在8.1.1365之前的Vim和在0.3.6之前的Neovim很容易通过打开特制的文本文件而通过模型执行任意代码. 复现条件: 确保未禁用mode ...
- 智学网电脑端查分小工具 已更新V2.2
特别鸣谢这段代码的源作者,我的大佬同学\(MetalkgLZH\).由于我没有做什么工作,这篇随笔基本不含相关技术细节. 再次强调,这个程序的主要部分由\(MetalkgLZH\)完成.技术细节与源码 ...
- 学习笔记04IIS
IIS机制:1.能监听端口,获取socket的客户端对象2.获取请求报文,将请求报文变成对象.3.处理请求报文,通过HttpApplication.ProcessRequest方法来处理HttpCon ...
- 「卡常」我T死了我好桑心,我不会卡常。
我死了我死了我死了 puts(“Lrefrain==T”)
- NOIP模拟13
上来看了一遍题,发现T2似乎不可做...暴力只给20分怎么玩? T1感觉是要离线处理,但是看了一会发现不会,遂决定先打暴力.然后去把T2 20分拿了,回去看T1,手摸了一下样例,成功推出式子,5分钟码 ...
- zookeeper集群搭建2.7
http://blog.csdn.net/uq_jin/article/details/51513307
- margin:0 auto为何会居中?
margin: 0 auto;为何会居中呢??? 一开始的学习html的时候,就是只知道块级元素margin:0 auto就能居中 但是后来就很好奇 margin: auto 0;为何不能垂直居中? ...
- 002.Kubernetes简单入门实例
一 环境准备 1.1 基础环境 Kubernetes模式:单机版 系统环境:CentOS 7/172.24.9.157 部署方式:yum快速部署 其他设置:开启NTP.关闭防火墙及SELinux 二 ...