电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

完整版编译原理试验报告逆波兰式分析VIP免费

完整版编译原理试验报告逆波兰式分析_第1页
1/4
完整版编译原理试验报告逆波兰式分析_第2页
2/4
完整版编译原理试验报告逆波兰式分析_第3页
3/4
河南工业大学实验报告课程编译原理实验名称实验三 逆波兰式分析一. 实验目的1.掌握自底向上分析中算符优先分析法的基本原理;2.掌握优先关系表的构造方法。二. 实验内容及要求根据介绍的算术表达式文法编制调试算符优先分析程序,以便对任意输入的简单算术表达式进行分析。将用中缀式表示的算术表达式转换为用逆波兰式(后缀式 )表示的算术表达式,并计算用逆波兰式表示的算术表达式的值。程序输入一以 #结束的符号串,如:2*(3+4)# 。输出过程如下:(1)逆波兰式 (后缀式 )为: 2&3&4&+*;(2)计算结果: 14。三. 实验过程及结果(说明:实验结果可以是运行画面的抓屏,抓屏图片要尽可能的小。)代码如下:#include #include #define max 100 char ex[max]; /* 存储后缀表达式*/ void trans(){ /* 将算术表达式转化为后缀表达式*/ char str[max]; /* 存储原算术表达式*/ char stack[max]; /* 作为栈使用 */ char ch; int sum,i,j,t,top=0; printf("*****************************************\n"); printf("* 输入一个求值的表达式,以#结束。 *\n"); printf("******************************************\n"); printf(" 算数表达式: "); i=0; /* 获取用户输入的表达式*/ do{ i++; scanf("%c",&str[i]); }while(str[i]!='#' && i!=max); sum=i; t=1;i=1; ch=str[i];i++; while(ch!='#'){ switch(ch){ case '(': /* 判定为左括号 */ top++;stack[top]=ch; break; case ')': /* 判定为右括号 */ while(stack[top]!='('){ ex[t]=stack[top];top--;t++; } top--; break; case '+': /* 判定为加减号 */ case '-': while(top!=0&&stack[top]!='('){ ex[t]=stack[top];top--;t++; } top++;stack[top]=ch; break; case '*': /* 判定为乘除号 */ case '/': while(stack[top]=='*'||stack[top]=='/'){ ex[t]=stack[top];top--;t++; } top++;stack[top]=ch; break; case ' ':break; default:while(ch>='0'&&ch<='9'){ /* 判定为数字 */ ex[t]=ch;t++; ch=str[i];i++; } i--; ex[t]='&';t++; } ch=str[i];i++; } while(top!=0){ ex[t]=stack[top];t++;top--; } ex[t]='#'; printf("\n\t 原来表达式: "); for(j=1;j

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

完整版编译原理试验报告逆波兰式分析

确认删除?
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群