哪位程序员高手帮帮我这道题!!急!!速回!!

  • 主题发起人 主题发起人 1+1=3
  • 开始时间 开始时间

1+1=3

新手上路
注册
2003-08-25
消息
144
荣誉分数
0
声望点数
0
挺急的一道题,小弟对这个真是不精通啊~~

下面是根据“算符优先分析法”模拟写的表达式求值的C编译程序,请根据程序回答问题

/*Pre-Compile*/
#include"stdlib.h"
#include"alloc.h"
#include"math.h"

#define INITSIZE 100
#define INCRE 10

/*Public Type Define*/
typedef struct{
char *base,*top;
int size;
}optype;

/*Functions*/
optype push(optype s,char e){
if (s.top-s.base>=s.size)
{
s.base=(char*)realloc(S.base,(S.size+INCRE)*sizeof(char));
if(!s.base)exit(overflow);
s.top=s.base+s.size;
s.size+=INCRE;
}
*s.top++e; return s;
}

optype pop(optype s){
--s.top;
return s;
}

optype Inits(optype s){
/*Init stack */
s.base=(char*)malloc(initsize*sizeof(char))
;
if(!s.base) exit(overflow);
s.top=s.base; s.size=INITSIZE;
return s;
}

char GetTop(optype s){
if(s.top==s.base;)return 0;
return *(s.top-1);
}

char Precede(char tr,char ch)
{if(tr=='*'&&ch=='*'||tr=='*'&&ch=='+'||tr=='*'&&ch=='-'||tr=='+'
&&ch=='+'||tr=='+'&&ch=='-'||tr=='-'&&ch=='+'||tr=="+"&&ch=='#'||tr=='*'&&ch=='#'||tr=='-'&&ch=='#')
return'>';

else if (tr=='+'&&ch=='*'||tr=='-'&&ch=='*'||tr=='#'&&ch=='-'||tr==
'#'&&ch=='*'||tr=='#'&&ch=='+')return'<';
else return '=';
}

char operate(char a,char x,char b)
{
if(x=='*')return(a-48)*(b-48)+48;
else if(x=='-')return (a-48)-(b-48)+48;
else return (a-48)+(b-48)+48;
}
char EvalExp(char exp[])
{ optype optr,opnd;
cjar x,ch,a,b; int i=0;
optr=InitS(optr);
optr=Push(optr,'#');
opnd=Inits(opnd);
ch=exp[i++];
while(ch!='#'||GetTOP(Optr)!='#')
if(ch>='1')&&ch<='9')
{opnd=Push(opnd,ch);ch=exp[i++];}
else
switch(Precede(GetTop(optr),ch))
{
case'<':
optr=Push(optr,ch);
ch=exp[i++];break;
case'=':
x=GetTop(optr);
optr=Pop(optr);
ch=exp[i++];break;
case '>':
x=GetTop(optr);
optr=Pop(opnd);
b=GetTop(opnd);
opnd=Pop(Opnd);
a=GetTop(opnd);
opnd=Pop(opnd);
opnd=push(opnd,Operate(a,x,b));
}
return GetTop(opnd);
}

main()
{ char exp[100];char value;
printf("Please input a expression:");
scanf("%s",exp);
value=EvalExp(exp);
printf("Value is %c\n"value);
getch();


问题:
1
请为每个函数用一句话说明其功能??



2
画出下面程序所依赖的“算符优先关系表”;


3
该程序只能算出其不意-9之间的+,-,*,如果想算出任意INT型数据的+,-,*
的运算结果,应如何改动该程序??
 
找本compiling principle的书翻翻就知道了,很简单的说
 
these stuff is so simple, they are not challenge enough for the those Da jia men.
they and I will suggest you to study hard, or look for the information in books or internet.
 
楼上的2位,都觉得简单.就帮人家解释解释.
 
后退
顶部