优先函数计算表达式C语言,用优先函数实现对表达式的运.doc

62e50291a81fc54b507f33cb80033297.gif 用优先函数实现对表达式的运.doc

(3页)

8c06ae820c1212b901793deaf5d67109.png

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

9.90 积分

用优先函数实现对表达式的运算班级 学号 姓名: 指导老师: 一. 实验目的:1、 学习语法分析的主要方法;2、 熟悉复习词法分析的方法;3、 表达式求值;4、 熟悉C语言并提高动手能力;二. 实验内容: 输入一个表达式,判断是否正确后,求出其值;三. 实验硬件和软件平台:INTEL C433MHz Cpu128Mb SDRAMTurbo C 2.0Microsoft Windows XP SP1四. 步骤和算法描述:1. 调用词法分析程序,转换表达式成为类号;2. 调用语法分析程序,判断表达式正确与否;3. 根据代码的优先级,求表达式的值;五. 源程序:#include #include #include #include #include #include "d:\TURBOC2\document1.c"#include "d:\TURBOC2\documentNEW.c"int check=10;int change(char *cd1,int a){ int len,i,o=0,c,j; for(i=0;i=i;j--){ if(j==i) c=1*c; else c=c*10; } o=o+(cd1[i+1]-48)*c; } return(o);}int Count(int a,int b,char c){ int dd; switch(c){ case '*':dd=a*b;break; case '/':dd=a/b;break; case '+':dd=a+b;break; case '-':dd=a-b;break; default :printf("Error!"); } return(dd);}char compare(char a,char b){ if(a=='*'&&b=='/') return('>'); if(a=='/'&&b=='*') return('>'); if(a=='+'&&b=='-') return('>'); if(a=='-'&&b=='+') return('>'); if(a=='*'&&b=='+') return('>'); if(a=='*'&&b=='-') return('>'); if(a=='/'&&b=='+') return('>'); if(a=='/'&&b=='-') return('>'); if(a=='+'&&b=='*') return(''); if(a=='+'&&b==')') return('>'); if(a=='-'&&b==')') return('>'); if(a=='('&&b=='*') return(''); if(a==')'&&b=='+') return('>'); if(a==')'&&b=='-') return('>'); if(a=='*'&&b==';') return('>'); if(a=='/'&&b==';') return('>'); if(a=='+'&&b==';') return('>'); if(a=='-'&&b==';') return('>'); if(a=='#'&&b=='*') return(''); if(a=='*'&&b=='*') return('>'); if(a=='/'&&b=='/') return('>'); if(a=='+'&&b=='+') return('>'); if(a=='-'&&b=='-') return('>'); if(a=='('&&b==')') return('='); if(a==')'&&b==';') return('>');}main(){ FILE *fp,*fq; char c1[100],c; char chuan[100]; int c2[100],d,i=0,j=0,result,ii=0,a,b; clrscr(); fp=fopen("document1.txt","wr"); if(!fp) printf("Open File Error!"); else{ printf("Please Input biao da shi :\n"); while((c=getchar())!='#') fprintf(fp,"%c",c); fclose(fp); cifa(); yufa(); if(check==10){ printf("yufa OK!"); fp=fopen("document1.txt","r"); fq=fopen("document3.txt","w"); if(!fq||!fp) printf("file not open!"); else{ fscanf(fp,"%c",&c); fscanf(fp,"%c",&c); while(c!=';'){ fscanf(fp,"%c",&c); while(c!='+'&&c!='-'&&c!='*'&&c!='/'&&c!='('&&c!=')'&&c!=';'){ fprintf(fq,"%c",c); fscanf(fp,"%c",&c); } fprintf(fq," %c ",c); } fclose(fp); fclose(fq); } } else{ printf("yufa Error!"); exit(0); } } for(i=0;i='0'&&c<='9'){ i++; chuan[i]=c; fscanf(fp,"%c",&c); } ii++; c2[ii]=change(chuan,i); } if(c==' ') fscanf(fp,"%c",&c); if(c=='*'||c=='/'||c=='+'||c=='-'||c=='('||c==')'||c==';'){ switch(compare(c1[j-1],c)){ case '': if(ii>=2){ a=c2[ii];ii=ii-1; b=c2[ii]; result=Count(b,a,c1[--j]); c1[j]=c; c2[ii]=result; break; } else{ c1[j++]=c; fscanf(fp,"%c",&c); break; } } } } printf("\nresult->%d\n",result);} 关 键 词: 表达式 优先 函数 实现

524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值