1、编制一个中间代码生成程序,能将算术表达式等翻译成逆波兰形式;

2、程序具有通用性,即能接受各种不同的算术表达式等语法成分。

3、对于语法正确的算术表达式,能生成逆波兰表示,并输出结果;


C++实现如下:

#include<bits/stdc++.h>
using namespace std;char st[1000];  //保存符号的堆栈数组
int top=-1;        //堆栈指针
string ss="";    //保存结果逆波兰式 int main(){printf("%s","Input:");string s;cin>>s;int L=s.length();for(int i=0;i<L;i++){if(s[i]=='+'||s[i]=='-'){if(top==-1){st[++top]=s[i];}else{while(st[top]!='('&&top>-1){//遇到 +、- 将栈中元素出栈直到遇见"("或堆栈为空 ss.push_back(st[top]);top--;}st[++top]=s[i];    //再将 +、- 入栈 }}else if(s[i]=='*'||s[i]=='/'){if(top==-1){st[++top]=s[i];}else{while(st[top]!='('&&(st[top]=='*'||st[top]=='/')){    //遇到 *、/ 将栈中 *、/出栈直到遇见"("或堆栈为空 ss.push_back(st[top]);top--;}st[++top]=s[i];    //再将 *、/ 入栈 }}else if(s[i]=='('){   //遇到 "(" 直接入栈 st[++top]=s[i];}else if(s[i]==')'){  //遇到右括号将左括号之前全部出栈,加入逆波兰式 while(st[top]!='('){ss.push_back(st[top]);top--;}top--;  //左括号出栈但不加入逆波兰式 }else{ss.push_back(s[i]);   //操作数直接加入逆波兰式 }}//最后,将堆栈中全部元素加入逆波兰式 while(top>-1){ss.push_back(st[top]);top--;}printf("%s","逆波兰式为:");cout<<ss<<endl;return 0;
}

编译原理——中间代码生成(逆波兰表示)相关推荐

  1. 编译原理 | 实验四 | 逆波兰式

    目录 一.问题分析 二.算法思想 1.关于分词器 2.关于逆波兰式分析器: 三.实现代码 1.头文件  &  类视图 2.预处理部分 3.逆波兰分析过程 4.计算,输出部分 四.总结 一.问题 ...

  2. 编译原理实验二-逆波兰式生成程序

    一.实验目的和要求: 1. 掌握语法分析的基本思想,并用高级语言编写逆波兰式生成程序 2. 要求利用逆波兰式生成算法编写程序,将从键盘上输入的算术表达式 (中缀表达式)转化成逆波兰式 二.实验平台: ...

  3. 逆波兰式 java_Java 实现《编译原理》中间代码生成 -逆波兰式生成与计算 - 程序解析...

    Java 实现<编译原理>中间代码生成 -逆波兰式生成与计算 - 程序解析 编译原理学习笔记 (一)逆波兰式是什么? 逆波兰式(Reverse Polish notation,RPN,或逆 ...

  4. 编译原理:代码生成(pcode),C语言实现

    编译原理:代码生成(pcode),C语言实现 部分参考代码及函数: #include #include <stdio.h> #include <string.h> #inclu ...

  5. 编译原理—中间代码生成、布尔表达式翻译、短路计算、控制流语句翻译、条件语句、循环语句

    编译原理-中间代码生成.布尔表达式翻译.短路计算.控制流语句翻译.条件语句循环语句 1.布尔表达式的翻译 1.1 数值表示法 1.2举例 1.3短路计算 1.4回填技术 1.5短路计算及回填的翻译方案 ...

  6. 编译原理中间代码生成--java实现

    本人博客内编译原理文章的配套资源jar包,包括词法分析,语法分析,中间代码生成,静态语义检查,代码解释执行以及抽象语法树的手动生成:https://download.csdn.net/download ...

  7. 编译原理--中间代码生成(自己看)

    高级语言 翻译成 LLVM虚拟机代码 可以移植到各种平台 课上要求 能够根据给定方案翻译得到结果即可 难点:实现一遍扫描 目标:转换为三地址语句 如: 常用三地址语句 声明语句的翻译过程 有翻译方案如 ...

  8. java pl0 四元式,【编译原理】c++实现自下而上语法分析及中间代码(四元式)生成...

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  9. 编译原理公式计算器C语言,编译原理课程设计-简单计算器实现.doc

    编译原理课程设计-简单计算器实现 课程设计报告课程:编译原理学号:姓名:班级:11级嵌入式应用技术班教师:时间:2014年6月计算机科学与技术系 设计名称:简单计算器的实现设计内容.目的与要求:设计内 ...

  10. 编译原理逆波兰式实验java_【实验三】—— 逆波兰式生成实验报告

    实验三 逆波兰式生成实验报告 一.实验名称:逆波兰式生成 二.仪器.设备:计算机 三.参考资料:<编译原理教程>习题解析与上机指导(西安电子科技大 胡元义等) 四.实验目的:将非后缀式用来 ...

最新文章

  1. 排序只显示前5_Linux 文件大小统计与排序 du,df 和 sort!
  2. 五天带你学完《计算机网络》·第二天·数据链路层
  3. 【机器学习入门笔记9:TensorFlow四则运算】20190216
  4. Java黑皮书课后题第8章:*8.27(列排序)用下面的方法实现一个二维数组中的列排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵
  5. 面试题 08.03. Magic Index LCCI 魔术索引
  6. linux开发亿连手机互联,亿连手机互联车载版下载-亿连手机互联车机版v6.6.1 安卓版-腾牛安卓网...
  7. java导出pdf 含图片_java 生成PDF含图片和中文件实现代码
  8. asterisk的NAT配置
  9. Java源码混淆,jar包加密,禁止反编译jar包
  10. 如何设置 jqplot 图表插件的轴和网格
  11. python列表求斐波那契数列_python3 求斐波那契数列(Fibonacci sequence)
  12. 【面试题】华为20道大数据面试题整理
  13. 多测师肖sir__ui分层
  14. 在唯一密钥属性“fileExtension”设置为“.json”时,无法添加类型为“mimeMap”的重复集合项...
  15. 字符串intern()方法详解
  16. 数学建模--神经网络在线绘图工具,流程图绘图工具,OCR图片公式识别
  17. 插入移动硬盘提示格式化怎么办?数据还有机会找回吗
  18. C#使用正则表达式校验邮箱
  19. JTextField:单行文本框组件
  20. android屏幕唤醒与解锁

热门文章

  1. 生活中的算法的实际举例_算法在实际生活中的应用
  2. strlen源码分析
  3. Ubuntu 16.04 安装运行 ROVIO odometry
  4. 项目中集成阿里巴巴分布式定时任务
  5. linux so fprintf,Linux下printf、fprintf、sprintf的区别
  6. AAC 音频格式详解
  7. 常用软件国内源镜像地址大全
  8. 今天母亲节,作为程序员,我是这样表达母爱的……
  9. 【QT】对话框dialog
  10. java 基于微信小程序的饭店外卖点餐系统 uniapp小程序