《编译原理一个简单的计算器程序》由会员分享,可在线阅读,更多相关《编译原理一个简单的计算器程序(4页珍藏版)》请在金锄头文库上搜索。
1、1 实验目的 设计、实现一个简单的计算器程序2 实验原理 2.1 多项式计算器的实现,采用后缀表达式来对输入的计算表达式进行计算。 2.2 对后缀表达式进行符号识别、词法分析、语法分析。 3. 主要仪器设备 操作系统:WindowsXP 开发语言:Visual Studio C+6.04. 主要内容和步骤 将表达式转换为后缀表达式, 编写程序源代码。5 软件编程与设计#include#include#define MaxSize 99void translate(char str,char exp) /*将算术表达式转换成后缀表达式*/ struct char dataMaxSize; int
2、 top; /*top为栈顶*/ op; /*定义一个含data和top的结构体*/ char ch; int i = 0,t = 0; op.top = -1; ch = stri; /*将str的每一个数转换成ch*/ i+; while(ch != 0) /*ch对应不同的符号的时候对应的转换情况*/ switch(ch) case (: /*当是(的时候,将此括号存入栈op*/ op.top+;op.dataop.top=ch; break; case ): while(op.dataop.top != () /*括号内的转换优先级最高,故先提取表达式*/ expt=op.dataop
3、.top; op.top-; t+; op.top-; break; case +: case -: while(op.top != -1&op.dataop.top != () expt = op.dataop.top; op.top-; t+; op.top+; /*恢复可插入位置*/ op.dataop.top = ch; break; case *: case /: while(op.top = /|op.top = *) /*优先级*/ expt = op.dataop.top; op.top-; t+; op.top+; op.dataop.top = ch; break; cas
4、e : /*忽略空格,排除误操作*/ break; default: while(ch = 0&ch = 0&ch = 9) /*从后缀表达式中获取操作数,#作用在此体现*/ d = 10*d+ch-0; ch = expt; t+; st.top+; st.datast.top = d; ch = expt; t+; return st.datast.top;int main() /*可以提到前面去*/ char strMaxSize,expMaxSize; /*str为算术表达式,exps为后缀表达式*/ printf(请输入一个求值表达式n); gets(str); /*输入一个算术表达式*/ printf(原表达式是:%sn,str); translate(str,exp); /*将算术表达式转换成后缀表达式*/ printf(后缀表达式:%sn,exp); printf(计算结果:%gn,