用优先函数现对表达式的运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用优先函数实现对表达式的运算

班级学号姓名:指导老师:

一. 实验目的:

1、学习语法分析的主要方法;

2、熟悉复习词法分析的方法;

3、表达式求值;

4、熟悉C语言并提高动手能力;

二. 实验内容:

输入一个表达式,判断是否正确后,求出其值;

三.实验硬件和软件平台:

INTEL C433MHz Cpu

128Mb SDRAM

Turbo C 2.0

Microsoft 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

c=1;

for(j=a-1;j>=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('>'); 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!='/'&

相关文档
最新文档