char *Lineptr; int Stack[10], Stackptr, Stacktop; calc() { char line[80]; char c; Stacktop = 10; for(;;) { puts("-> "); if( gets(Lineptr=line) ) { if( *Lineptr=='x' ) return; addition(); printf( "%d\n", pop() ); } } } number() { if( isdigit( *Lineptr ) ) { push( atoi( Lineptr ) ); while( isdigit( *Lineptr ) ) ++Lineptr; } } addition() { int num; for(;;) { multiplication(); if( *Lineptr=='+' ) { ++Lineptr; multiplication(); push( pop() + pop() ); } else if ( *Lineptr=='-' ) { ++Lineptr; multiplication(); num = pop(); push( pop() - num ); } else return; } } multiplication() { int num; for(;;) { number(); if( *Lineptr=='*' ) { ++Lineptr; number(); push( pop() * pop() ); } else if ( *Lineptr=='/' ) { ++Lineptr; number(); num = pop(); push( pop() / num ); } else return; } } push( n ) { if( Stackptr0 ) return Stack[ --Stackptr ]; puts( "stack underflow\n" ); } isdigit(c){ return '0'<=c && c<='9';}