#include <stdio.h>
#include <string.h>
char stack[ 100 ] [ 10 ] ;
int top = - 1 ;
int pos = 0 ;
char input[ 100 ] ;
void push( const char * s)
{
}
void pop( )
{
top--;
}
void printStack( )
{
for ( int i = 0 ; i <= top; i++ ) {
}
}
int reduce( )
{
// Rule 1: E → E + E
if ( top >= 2 &&
strcmp ( stack
[ top
- 2 ] , "E" ) == 0 && strcmp ( stack
[ top
- 1 ] , "+" ) == 0 && {
pop( ) ;
pop( ) ;
pop( ) ;
push( "E" ) ;
return 1 ;
}
if ( top >= 2 &&
strcmp ( stack
[ top
- 2 ] , "E" ) == 0 && strcmp ( stack
[ top
- 1 ] , "*" ) == 0 && {
pop( ) ;
pop( ) ;
pop( ) ;
push( "E" ) ;
return 1 ;
}
if ( top >= 2 &&
strcmp ( stack
[ top
- 2 ] , "(" ) == 0 && strcmp ( stack
[ top
- 1 ] , "E" ) == 0 && {
pop( ) ;
pop( ) ;
pop( ) ;
push( "E" ) ;
return 1 ;
}
if ( top!=- 1 && stack[ top] [ 0 ] >= 'a' && stack[ top] [ 0 ] <= 'z' )
{
pop( ) ;
push( "E" ) ;
return 1 ;
}
return 0 ;
}
int main( )
{
printf ( "Enter an Expression:\n " ) ;
fgets ( input
, sizeof ( input
) , stdin
) ;
if ( len > 0 && input[ len- 1 ] == '\n ' ) {
input[ len- 1 ] = '\0 ' ;
}
pos = 0 ;
while ( input[ pos] )
{
while ( input[ pos] == ' ' || input[ pos] == '\t ' ) {
pos++;
}
if ( ! input[ pos] ) break ;
char temp[ 2 ] = { input[ pos] , '\0 ' } ;
push( temp) ;
pos++;
printStack( ) ;
while ( reduce( ) )
{
printStack( ) ;
}
}
if ( top
== 0 && strcmp ( stack
[ 0 ] , "E" ) == 0 ) else
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmNoYXIgc3RhY2tbMTAwXVsxMF07CmludCB0b3AgPSAtMTsgICAgICAKaW50IHBvcyA9IDA7ICAgICAgIApjaGFyIGlucHV0WzEwMF07ICAgCgoKdm9pZCBwdXNoKGNvbnN0IGNoYXIgKnMpCnsKICAgIHN0cmNweShzdGFja1srK3RvcF0sIHMpOwp9Cgp2b2lkIHBvcCgpCnsKICAgIHRvcC0tOwp9CgoKdm9pZCBwcmludFN0YWNrKCkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gdG9wOyBpKyspIHsKICAgICAgICBwcmludGYoIiVzIiwgc3RhY2tbaV0pOwogICAgICAgIGlmIChpIDwgdG9wKSBwcmludGYoIiAiKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKfQoKCmludCByZWR1Y2UoKQp7CiAgICAvLyBSdWxlIDE6IEUg4oaSIEUgKyBFCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIkUiKT09MCAmJgogICAgICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTFdLCAiKyIpPT0wICYmCiAgICAgICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiRSIpPT0wKQogICAgewogICAgICAgIHBvcCgpOwogICAgICAgIHBvcCgpOwogICAgICAgIHBvcCgpOyAgIAogICAgICAgIHB1c2goIkUiKTsgICAgICAgICAgCiAgICAgICAgcmV0dXJuIDE7ICAgICAgICAgICAgICAKICAgIH0KCiAgICAKICAgIGlmICh0b3AgPj0gMiAmJgogICAgICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTJdLCAiRSIpPT0wICYmCiAgICAgICAgICAgIHN0cmNtcChzdGFja1t0b3AtMV0sICIqIik9PTAgJiYKICAgICAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICJFIik9PTApCiAgICB7CiAgICAgICAgcG9wKCk7CiAgICAgICAgcG9wKCk7CiAgICAgICAgcG9wKCk7ICAgCiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIigiKT09MCAmJgogICAgICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTFdLCAiRSIpPT0wICYmCiAgICAgICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiKSIpPT0wKQogICAgewogICAgICAgIHBvcCgpOwogICAgICAgIHBvcCgpOwogICAgICAgIHBvcCgpOyAgIAogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAKICAgIGlmICh0b3AhPS0xICYmIHN0YWNrW3RvcF1bMF0+PSdhJyYmc3RhY2tbdG9wXVswXTw9J3onKQogICAgewogICAgICAgIHBvcCgpOyAgCiAgICAgICAgcHVzaCgiRSIpOyAgCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcmV0dXJuIDA7IAp9CgppbnQgbWFpbigpCnsKICAgIAogICAgcHJpbnRmKCJFbnRlciBhbiBFeHByZXNzaW9uOlxuIik7CiAgICAKICAgIAogICAgZmdldHMoaW5wdXQsIHNpemVvZihpbnB1dCksIHN0ZGluKTsKICAgIAogICAgCiAgICBpbnQgbGVuID0gc3RybGVuKGlucHV0KTsKICAgIGlmIChsZW4gPiAwICYmIGlucHV0W2xlbi0xXSA9PSAnXG4nKSB7CiAgICAgICAgaW5wdXRbbGVuLTFdID0gJ1wwJzsKICAgIH0KCiAgICAKICAgIHBvcyA9IDA7CiAgICB3aGlsZSAoaW5wdXRbcG9zXSkKICAgIHsKICAgICAgICAKICAgICAgICB3aGlsZSAoaW5wdXRbcG9zXSA9PSAnICcgfHwgaW5wdXRbcG9zXSA9PSAnXHQnKSB7CiAgICAgICAgICAgIHBvcysrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoIWlucHV0W3Bvc10pIGJyZWFrOyAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgY2hhciB0ZW1wWzJdID0ge2lucHV0W3Bvc10sICdcMCd9OwogICAgICAgIHB1c2godGVtcCk7CiAgICAgICAgcG9zKys7ICAgICAgICAKCiAgICAgICAgCiAgICAgICAgcHJpbnRmKCJTaGlmdDogIik7CiAgICAgICAgcHJpbnRTdGFjaygpOwoKICAgICAgICB3aGlsZSAocmVkdWNlKCkpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIlJlZHVjZTogIik7CiAgICAgICAgICAgIHByaW50U3RhY2soKTsKICAgICAgICB9CiAgICB9CgogICAgCiAgICBpZiAodG9wID09IDAgJiYgc3RyY21wKHN0YWNrWzBdLCAiRSIpPT0wKQogICAgICAgIHByaW50ZigiU3RyaW5nIEFjY2VwdGVkXG4iKTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIlN0cmluZyBSZWplY3RlZFxuIik7CgogICAgcmV0dXJuIDA7Cn0=