用优先函数实现对表达式的运.doc
(3页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
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);} 关 键 词: 表达式 优先 函数 实现
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。