#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum {lparen, rparen, plus, mines, times, divide, mod, eos, operand} precedence;
void set_(void) {
precedence stack[100];
static int isp[]={0,19,12,12,13,13,13,0};
static int icp[]={20,19,12,12,13,13,13,0};
}
precedence get_token(char *symbol, int *n){
*symbol = expr[(*n)++];
switch(*symbol){
case '(': return lparen;
case ')': return rparen;
case '+': return plus;
case '-': return mines;
case '/': return divide;
case '*': return times;
case '%': return mod;
case ' ': return eos;
default: return operand;
}
}
void postfix(void){
char symbol;
precedence token;
int n=0;
int top=0
stack[0]=eos;
for(token=get_token(&symbol, &n);token!=eos;token=get_token(&symbol, &n)){
if(token==operand) printf("%c", symbol);
else if(token==rparen){
while(static[top]!=lparen)
print_token(pop());
pop();
}
else{
while(isp[static[top]>=icp[token]])
print_token(pop());
push(token);
}
}
while((token=pop())!= eos)
print_token(token);
printf("\n";)
}
}
int eval(void){
precedence token;
char symbol;
int op1, op2;
int n=0;
int top =-1;
token = get_token(&symbol, &n);
while(token != eos){
if(token == operand)
push(symbol-'0');
else{
op2=pop();
op1=pop();
switch (token) {
case plus: push(po1+po2); break;
case mines: push(po1-po2); break;
case times: push(po1*po2); break;
case divide: push(po1/po2); break;
case mod: push(po1%po2); break;
}
}
token = get_token(&symbol, &n);
}
return pop();
}
To embed this project on your website, copy the following code and paste it into your website's HTML: