|
i Used Passing
Both function main () I would like to put in
#include <stdlib.h> #include <math.h> #include <stdio.h> #include <ctype.h>
int token; void error(); void getToken(); void match(char); int expr(); int term(); int factor(); int power(); int number(); int digit();
int main() { int result;
getToken(); result = expr(); if(token == '\n') printf("The result is: %d\n", result); else error(); }
void error() { printf("parse error\n"); exit(1); }
void getToken() { while((token = getchar()) == ' '); }
void match(char c) { if(token == c) getToken(); else error(); }
int expr() //expr -> term { '+' | '-' term } { int result = term(); while(token == '+' || token == '-') { switch(token) { case '+' : match('+'); result += term(); break;
case '-' : match('-'); result -= term(); break; } } return result; }
int term() //term -> factor { '*' | '/' | '%' factor } { int result = factor(); while(token == '*' || token == '/' || token == '%') { switch(token) { case '*' : match('*'); result *= term(); break; case '/' : match('/'); result /= term(); break; case '%' : match('%'); result %= term(); break; } } return result; }
int factor() //factor -> power { '^' factor } { int result = power(); while(token == '^') { match('^'); result = (int)pow((double)result, (double)factor()); } return result; }
int power() //power -> '(' expr ')' | number { int result; if (token == '(') { match('('); result = expr(); match(')'); } else result = number(); return result; }
int number() //number -> digit { digit } { int result = digit(); while(isdigit(token)) result = 10 * result + digit(); return result; }
int digit() //digit -> '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' { int result; if(isdigit(token)) { result = token - '0'; match(token); } else error();
return result; }
|