Skip to main content

YACC Program to evaluate the arithmetic expression and check validation and print the result

arithmetic.l


//lex program

/* declaration section in this sections we will decleared the different value and include the header file which we are using in this program to run this program */

%{
#include<stdio.h>
#include "y.tab.h"
extern int yylval;
%}

/* this sections is known as defined section in which we defined the rule and regulation of regular expression which will be going to accept or not */

%%
[0-9]+ {
          yylval=atoi(yytext);
          return NUMBER;
       }
[\t] ;
[\n] return 0;
. return yytext[0];
%%

int yywrap()
{
return 1;
}


arithmatic.y

/* yacc program for soving arithmatic expression */

/* decleration section in this sections we will decleared the different  value and include the header file which we are using in this program to run this program */

%{
    #include<stdio.h>
    int flag=0;
    
%}



%token NUMBER

%left '+' '-' 
%left  '*' '/' '%'
%left '(' ')'

/* this sections is known as defined section in which we defined the rule and regulation of regular expression which will going to accept or not */

%%
ArithmeticExpression: E{
         printf("\nResult=%d\n",$$);
         return 0;
        }
E:E'+'E {$$=$1+$3;}
 |E'-'E {$$=$1-$3;}
 |E'*'E {$$=$1*$3;}
 |E'/'E {$$=$1/$3;}
 |E'%'E {$$=$1%$3;}
 |'('E')' {$$=$2;}
 | NUMBER {$$=$1;}
;

%%

void main()
   printf("\nEnter Any Arithmetic Expression which can have operations Addition, Subtraction, Multiplication, Divison, Modulus and Round brackets:\n");
   yyparse();
  if(flag==0)
   printf("\nEntered arithmetic expression is Valid\n\n");
  
}

void yyerror()
{
   printf("\nEntered arithmetic expression is Invalid\n\n");
   flag=1;
}



how to run

                save the file as above  name
               compile flex file "flex arithmetic.l"
               compile yacc file " yacc -d arithmetic.y"
               compile c file generated by  flex and yacc "cc lex.yy.c  y.tab.c  -o  arithmetic -ll "
               run the obj file  "./arithmetic"
              
                                    



               


Comments

Popular posts from this blog

YACC Program to check whether the arithmetic expression is valid or not

validexp.l //LEX Program /* declaration section in this sections we will declare the different value and include the header file which we are using in this program to run this program */ %{ #include"y.tab.h" extern yylval; %} /* defined section */ %% [0-9]+ {yylval=atoi(yytext); return NUMBER;}    //this is send to the yacc code as token INTEGER [a-zA-Z]+ {return ID;}                                          //this is send to the yacc code as token  ID [\t]+ ; \n {return 0;} . {return yytext[0];} %%    validexp.y  //yacc program //decelration section %{ #include<stdio.h> %} //definition section %token NUMBER ID                        // token from lex file %left '+' '-'                    ...

LEX to count the no of "scanf" and "printf" statement in a c program. Replace them with "writf" and "readf" respectively.

/* declaration section in this sections we will declare the different value and include the header file which we are using in this program to run this program */ %{ #include<stdio.h> int sf=0,pf=0; %} /* defined section */ %% "scanf" { sf++; fprintf(yyout,"readf");}            // replace scanf  with readf "printf" { pf++; fprintf(yyout,"writef");}            // replace printf  with writef %% int main() { yyin=fopen("open.c","r");                            // input file open.c yyout=fopen("new.c","w");                            // output file new.c with replace  yylex();      //no of printf and scanf in the file printf("Number of scanfs=%d\nNumber of Printf's=%d\n",sf,pf); return 0; } download the file  ...

lex program to count the number of Positive and negative integer

/* decleration section in this sections we will decleared the different  value and include the header file which we are using in this program to run this program */ %{ #include<stdio.h> int p_count=0; int n_count=0; %} /* this sections is known as defined section in which we defined the rule and regulation of regular expression which will going to accept or not */ %% [+]?([0-9])+  { /* this is for increment and print the positive integer eg: 96, +36 */ p_count++; printf("Positive Integer:%s\n",yytext);} [-]([0-9])+   { /* this is for increment and print the negative integer eg: -96, -36 */ n_count++; printf("negative Integer:%s\n",yytext);} %% /* main function for calling the function */ void main(int argc[],char *argv[]) { yylex(); printf("the total number of Postive Integer are: %d\n" ,p_count); printf("the total number of Negative  Integer are:%d\n",n_count); }                ...