CD 22-24
CD 22-24
CODE:
(prog.l):
%{
#include "y.tab.h"
%}
%%
[0-9]+ { yylval = atoi(yytext); return NUMBER; }
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return MUL; }
"/" { return DIV; }
[ \t] {}
. { printf("Unexpected character: %s\nINVALID expression", yytext); exit(1); }
%%
int yywrap()
{ return 1;
}
%{
#include <stdio.h>
#include <stdlib.h>
%}
%token NUMBER
%token PLUS MINUS MUL DIV
%%
expr:
expr PLUS expr
| expr MINUS expr
| expr MUL expr
| expr DIV expr
| NUMBER
;
%%
int yyerror(const char *s){
fprintf(stderr, "Error: %s\n", s);
exit(1);
}
int main(){
printf("Enter an arithmetic expression: ");
if(yyparse() == 0){
printf("This is a valid expression\n");
}
else printf("This expression is invalid\n");
return 0;
}
SOURCE CODE:
(prog.l):
%{
#include "y.tab.h"
%}
%%
%%
int yywrap(){
return 1;
}
%token NUMBER
%left '+' '-'
%left '*' '/'
%%
expr:
expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { if($3 == 0){ fprintf(stderr,
"Cannot divide by 0\n"); exit(1); } else{
$$ = $1 / $3;
}
}
| NUMBER { $$ = $1; }
;
%%
int main(){
printf("Enter an arithmetic expression:\
n"); yyparse();
return 0;
}
Program.l
%{
#include "y.tab.h"
%}
%%
%%
int yywrap()
{
return 1;
}
%{
#include <stdio.h>
#include <stdlib.h>
void yyerror(const char *s);
int yylex();
%}
%token NUMBER
%left '+' '-'
%left '*' '/'
%%
stmt:
expr '\n' { printf("\n"); }
;
expr:
expr '+' expr { printf(" + "); }
| expr '-' expr { printf(" - "); }
| expr '*' expr { printf(" * "); }
| expr '/' expr { printf(" / "); }
| '(' expr ')' /* ignore parentheses in output */
| NUMBER { printf("%d ", $1); } // Changed yyval to $1
;
%%
int main()
{
printf("Enter infix expression: \n");
yyparse();
return 0;
}