LEX Program
%{
#include <stdio.h>
#include <string.h>
#include "y.tab.h"
%}
DIGIT [0-9]+
ID [a-zA-Z][a-zA-Z0-9]*
op "+"|"-"|"*"|"/"
%%
{ID} { strcpy(yylval.str,yytext); return id; }
{DIGIT} { strcpy(yylval.str,yytext); return no; }
{op} { return (int) yytext[0]; }
\n { return(0); }
. { return err; }
%%
#include <stdio.h>
#include <string.h>
#include "y.tab.h"
%}
DIGIT [0-9]+
ID [a-zA-Z][a-zA-Z0-9]*
op "+"|"-"|"*"|"/"
%%
{ID} { strcpy(yylval.str,yytext); return id; }
{DIGIT} { strcpy(yylval.str,yytext); return no; }
{op} { return (int) yytext[0]; }
\n { return(0); }
. { return err; }
%%
YACC Program
%{
#include <stdio.h>
#include <ctype.h>
#include <string.h>
char result[50];
int f=0;
%}
%union{
char str[50];
};
%token <str> id
%token <str> no
%token <str> err
%type <str> exp
%left '-' '+'
%left '*' '/'
%%
input: /* empty string */
| input exp {strcpy(result,$2);}
| error {f=1;}
;
exp: exp '+' exp { sprintf($$,"+%s %s",$1,$3); }
| exp '-' exp {sprintf($$,"-%s %s",$1,$3); }
| exp '*' exp { sprintf($$,"*%s %s",$1,$3); }
| exp '/' exp {sprintf($$,"/%s %s",$1,$3);}
| id {strcpy($$,$1);}
| no {strcpy($$,$1);}
;
%%
int main()
{
printf("\nEnter an arithmetic expression:\n\n");
yyparse();
printf("\n");
if(f==1)
printf("Invalid Expression\n");
else
puts(result);
return 0;
}
int yywrap()
{
return 1;
}
int yyerror(char *mes) {
return 0;
}
#include <stdio.h>
#include <ctype.h>
#include <string.h>
char result[50];
int f=0;
%}
%union{
char str[50];
};
%token <str> id
%token <str> no
%token <str> err
%type <str> exp
%left '-' '+'
%left '*' '/'
%%
input: /* empty string */
| input exp {strcpy(result,$2);}
| error {f=1;}
;
exp: exp '+' exp { sprintf($$,"+%s %s",$1,$3); }
| exp '-' exp {sprintf($$,"-%s %s",$1,$3); }
| exp '*' exp { sprintf($$,"*%s %s",$1,$3); }
| exp '/' exp {sprintf($$,"/%s %s",$1,$3);}
| id {strcpy($$,$1);}
| no {strcpy($$,$1);}
;
%%
int main()
{
printf("\nEnter an arithmetic expression:\n\n");
yyparse();
printf("\n");
if(f==1)
printf("Invalid Expression\n");
else
puts(result);
return 0;
}
int yywrap()
{
return 1;
}
int yyerror(char *mes) {
return 0;
}
OUTPUT