#include <stdio.h>
#include <string.h>
#include <ctype.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++ )
}
// Reduce with lookahead
int reduce( char lookahead)
{
// F -> id
if ( top >= 0 &&
stack[ top] [ 0 ] >= 'a' &&
stack[ top] [ 0 ] <= 'z' )
{
pop( ) ;
push( "F" ) ;
return 1 ;
}
// F -> (E)
if ( top >= 2 &&
strcmp ( stack
[ top
- 2 ] , "(" ) == 0 && strcmp ( stack
[ top
- 1 ] , "E" ) == 0 && {
pop( ) ; pop( ) ; pop( ) ;
push( "F" ) ;
return 1 ;
}
// T -> T * F
if ( top >= 2 &&
strcmp ( stack
[ top
- 2 ] , "T" ) == 0 && strcmp ( stack
[ top
- 1 ] , "*" ) == 0 && {
pop( ) ; pop( ) ; pop( ) ;
push( "T" ) ;
return 1 ;
}
// T -> F
if ( top >= 0 &&
{
pop( ) ;
push( "T" ) ;
return 1 ;
}
// E -> E + T (مع check للـ lookahead)
if ( top >= 2 &&
strcmp ( stack
[ top
- 2 ] , "E" ) == 0 && strcmp ( stack
[ top
- 1 ] , "+" ) == 0 && {
if ( lookahead == '*' )
return 0 ;
pop( ) ; pop( ) ; pop( ) ;
push( "E" ) ;
return 1 ;
}
// E -> T
if ( top >= 0 &&
{
pop( ) ;
push( "E" ) ;
return 1 ;
}
return 0 ;
}
int main( )
{
printf ( "Enter an Expression:\n " ) ; fgets ( input
, 100 , stdin
) ;
while ( input[ pos] )
{
{
pos++;
continue ;
}
char temp[ 2 ] = { input[ pos] , '\0 ' } ;
push( temp) ;
pos++;
printStack( ) ;
while ( reduce( input[ pos] ) )
{
printStack( ) ;
}
}
while ( reduce( '\0 ' ) )
{
printStack( ) ;
}
if ( top
== 0 && strcmp ( stack
[ 0 ] , "E" ) == 0 ) else
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgpjaGFyIHN0YWNrWzEwMF1bMTBdOwppbnQgdG9wID0gLTE7CmludCBwb3MgPSAwOwpjaGFyIGlucHV0WzEwMF07Cgp2b2lkIHB1c2goY29uc3QgY2hhciAqcykKewogICAgc3RyY3B5KHN0YWNrWysrdG9wXSwgcyk7Cn0KCnZvaWQgcG9wKCkKewogICAgdG9wLS07Cn0KCnZvaWQgcHJpbnRTdGFjaygpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHRvcDsgaSsrKQogICAgICAgIHByaW50ZigiJXMiLCBzdGFja1tpXSk7CiAgICBwcmludGYoIlxuIik7Cn0KCi8vIFJlZHVjZSB3aXRoIGxvb2thaGVhZAppbnQgcmVkdWNlKGNoYXIgbG9va2FoZWFkKQp7CiAgICAvLyBGIC0+IGlkCiAgICBpZiAodG9wID49IDAgJiYKICAgICAgICBzdGFja1t0b3BdWzBdID49ICdhJyAmJgogICAgICAgIHN0YWNrW3RvcF1bMF0gPD0gJ3onKQogICAgewogICAgICAgIHBvcCgpOwogICAgICAgIHB1c2goIkYiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBGIC0+IChFKQogICAgaWYgKHRvcCA+PSAyICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0yXSwgIigiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcC0xXSwgIkUiKSA9PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICIpIikgPT0gMCkKICAgIHsKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIkYiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBUIC0+IFQgKiBGCiAgICBpZiAodG9wID49IDIgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTJdLCAiVCIpID09IDAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wLTFdLCAiKiIpID09IDAgJiYKICAgICAgICBzdHJjbXAoc3RhY2tbdG9wXSwgIkYiKSA9PSAwKQogICAgewogICAgICAgIHBvcCgpOyBwb3AoKTsgcG9wKCk7CiAgICAgICAgcHVzaCgiVCIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIC8vIFQgLT4gRgogICAgaWYgKHRvcCA+PSAwICYmCiAgICAgICAgc3RyY21wKHN0YWNrW3RvcF0sICJGIikgPT0gMCkKICAgIHsKICAgICAgICBwb3AoKTsKICAgICAgICBwdXNoKCJUIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLy8gIEUgLT4gRSArIFQgKNmF2LkgY2hlY2sg2YTZhNmAIGxvb2thaGVhZCkKICAgIGlmICh0b3AgPj0gMiAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMl0sICJFIikgPT0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3AtMV0sICIrIikgPT0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiVCIpID09IDApCiAgICB7CiAgICAgICAgaWYgKGxvb2thaGVhZCA9PSAnKicpCiAgICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICBwb3AoKTsgcG9wKCk7IHBvcCgpOwogICAgICAgIHB1c2goIkUiKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBFIC0+IFQKICAgIGlmICh0b3AgPj0gMCAmJgogICAgICAgIHN0cmNtcChzdGFja1t0b3BdLCAiVCIpID09IDApCiAgICB7CiAgICAgICAgcG9wKCk7CiAgICAgICAgcHVzaCgiRSIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpCnsKICAgIHByaW50ZigiRW50ZXIgYW4gRXhwcmVzc2lvbjpcbiIpOwogICAgZmdldHMoaW5wdXQsIDEwMCwgc3RkaW4pOwoKICAgIHdoaWxlIChpbnB1dFtwb3NdKQogICAgewogICAgICAgIGlmIChpc3NwYWNlKGlucHV0W3Bvc10pKQogICAgICAgIHsKICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgY2hhciB0ZW1wWzJdID0ge2lucHV0W3Bvc10sICdcMCd9OwogICAgICAgIHB1c2godGVtcCk7CiAgICAgICAgcG9zKys7CgogICAgICAgIHByaW50ZigiU2hpZnQ6ICIpOwogICAgICAgIHByaW50U3RhY2soKTsKCiAgICAgICAgd2hpbGUgKHJlZHVjZShpbnB1dFtwb3NdKSkKICAgICAgICB7CiAgICAgICAgICAgIHByaW50ZigiUmVkdWNlOiAiKTsKICAgICAgICAgICAgcHJpbnRTdGFjaygpOwogICAgICAgIH0KICAgIH0KCiAgICB3aGlsZSAocmVkdWNlKCdcMCcpKQogICAgewogICAgICAgIHByaW50ZigiUmVkdWNlOiAiKTsKICAgICAgICBwcmludFN0YWNrKCk7CiAgICB9CgogICAgaWYgKHRvcCA9PSAwICYmIHN0cmNtcChzdGFja1swXSwgIkUiKSA9PSAwKQogICAgICAgIHByaW50ZigiU3RyaW5nIEFjY2VwdGVkXG4iKTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIlN0cmluZyBSZWplY3RlZFxuIik7CgogICAgcmV0dXJuIDA7Cn0=