lisp的解释器
Description
XXC小童鞋对lisp非常感兴趣,不过lisp是一个比较小众的黑客语言,因为它采用了一种不太容易理解的表达方式——S表达式。 S表达式形式如下:
Input
第一行包含一个整数N,代表用例个数。(N≤100) 接下来的N行每行包含一个用例,每一个用例包含一个lisp表达式,涉及四种二元操作符(+、-,*,/),嵌套层数不超过200。 善良的XXC童鞋希望解释器可以简单一点,所以在S表达式中,每个操作数都是整数类型。(注意到整数除法中,7/2=3.) 数据保证不会出现除0,不会超出int的范围
Output
对于给定的表达式,请给出其计算后的结果,形如“Case #id: result”
Sample Input
3
(+ 1 2)
(/ 1 3)
(/ 6 (+ 1 2))
Sample Output
Case #1: 3
Case #2: 0
Case #3: 2
Source
第八届北京交通大学ACM程序设计竞赛
#include <iostream>
#include <stack>
#include <string.h>
#include <stdlib.h>
using namespace std;
int main()
{
char str [];
int count;
cin>>count;
cin.getline(str,);
int t=count;
while(t--){
stack<double> Num;
stack<char> Op;
cin.getline(str,);
int len =strlen(str);//<string.h>
int sum=;
for (int i = ; i <len; i++)
{
char temp=str[i];
if (temp=='(')
{
Op.push(temp);
}
if (temp=='+'||temp=='-'||temp=='*'||temp=='/')
{
Op.push(temp);
}
if (temp==')')
{
int c=Num.top();
Num.pop();
int b=Num.top();
Num.pop();
char Temp_Op=Op.top();
if (Temp_Op=='+')
{
sum=b+c;
Op.pop();
}
if (Temp_Op=='-')
{
sum=b-c;
Op.pop();
}
if (Temp_Op=='*')
{
sum=b*c;
Op.pop();
}
if (Temp_Op=='/')
{
sum=b/c;
Op.pop();
}
Op.pop();
Num.push(sum);
}
if (isdigit(temp))
{
int temp_num=atoi(&str[i]); //<stdlib.h>
while(i<len && isdigit(str[i]))
{
i++;
}
i--;
Num.push(temp_num);
}
}
cout<<"Case #"<<count-t<<": "<<Num.top()<<endl;
}
}
lisp的解释器的更多相关文章
- [编译原理]用BDD方式开发lisp解释器(编译器)|开发语言java|Groovy|Spock
lisp是一门简单又强大的语言,其语法极其简单: (+ 1 2 ) 上面的意思 是:+是方法或函数,1 ,2 是参数,fn=1+2,即对1,2进行相加求值,结果是:3 双括号用来提醒解释器开始和结束. ...
- 翻译:Lisp Style Tips for the Beginner - Heinrich Taube
原文:Lisp Style Tips for the Beginner 本篇文章是一篇非正式的摘要,旨在帮助新手写出高效.易读的Lisp代码. 1 赋值 1.1 避免使用eval.赋值是Lisp内 ...
- 17 个 Linux 下用于 C/C++ 的最好的 IDE
C++,一个众所周知的 C 语言的扩展,是一个优秀的.强大的.通用编程语言,它能够提供现代化的.通用的编程功能,可以用于开发包括视频游戏.搜索引擎.其他计算机软件乃至操作系统等在内的各种大型应用. C ...
- 普通Linux用户1分钟上手vi编辑器
*导读:普通用户只要花1分钟看第二部分即可.高级用户请忽略本文* 目录 1. 编辑器之战 2. vi的使用 2.1 vi的3个模式 2.2 vi的3个模式切换 2.3 vi最基本的命令 2.4 vi的 ...
- [转载]为何 Emacs 和 Vim 被称为两大神器
Emacs 是神的编辑器,而 Vim 是编辑器之神.二者为何会有如此美誉,且听本文向你一一道来. 目 录 0. 序章:神器的传说 1. 无敌的可扩展性 1.1 可扩展性给了软件强大的生命 1.2 Em ...
- 编辑器之王:Emacs 和 Vim
Emacs 是神的编辑器,而 Vim 是编辑器之神.二者为何会有如此美誉,且听本文向你一一道来. Author: Jiqing Wu email: jiqingwu@gmail.com homepag ...
- 基于ACIS/HOOPS的3D应用开发简介 【转】
(整理) 平台: 造型引擎——ACIS 显示引擎——Direct3D/OpenGL/GDI 应用框架——HOOPS 组件关系图 ...
- map的实现和柯里化(Currying)
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/11329874.html 作者:窗户 ...
- vim和emacs
vim和emacs 在编程界一直有两大神器的传说.这两大神器一个是emacs,一个是vim.一个是神的编辑器,一个是编辑器之神. 程序员的圈子里面也一直流传着一个段子,说是世界上的程序员分为三种.使用 ...
随机推荐
- mac在终端打开应用程序
今天研究了下mac终端的启动流程.以下以sublime为例,介绍怎么在mac的终端中加入app启动方法. 方法1 :使用"open -a /Applications/Sublime\ Tex ...
- How to configure spring boot through annotations in order to have something similar to <jsp-config> in web.xml?
JSP file not rendering in Spring Boot web application You will need not one but two dependencies (ja ...
- 10g RAC 采用service达到taf
service由于oracle数据库中的一个关键概念,利用得当,可以轻松地管理数据库,提高数据库的工作效率. 经service.oracle可以实现server side taf,简单化client ...
- HDU1164_Eddy's research I【Miller Rabin素数测试】【Pollar Rho整数分解】
Eddy's research I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hx计算机基础
参考:http://python.jobbole.com/82294/ https://www.jianshu.com/p/aed6067eeac9 1. 操作系统基础题 1)在32位操作系统下,系统 ...
- 一篇简单易懂的原理文章,让你把JVM玩弄与手掌之中
jvm原理 Java虚拟机是整个java平台的基石,是java技术实现硬件无关和操作系统无关的关键环节,是java语言生成极小体积的编译代码的运行平台,是保护用户机器免受恶意代码侵袭的保护屏障.JVM ...
- cocos2d-x 源代码分析 总文件夹
这篇博客用来整理与cocos2d-x相关的工作,仅仅要有新的分析.扩展或者改动,都会更改此文章. 祝大家愉快~ 1.源代码分析 1.CCScrollView源代码分析 http://blog.csdn ...
- ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 动作结果 前面的章节中,我们一直使用简单的 C# 类作为控制器. 虽 ...
- [Android] 环境优化配置Android Studio发展NDK
======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 站点:www. ...
- JS 小鸟飞
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...