%{
#include <stdio.h>
#include <stdlib.h>
int yylex(void);
void yyerror(char *s);
%}
%token NUMBER
%left '+' '-'
%left '*' '/'
%left NEG
%%
expr:
expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr {
if ($3 == 0) {
yyerror("Error: Division by zero.");
YYABORT;
}
$$ = $1 / $3;
}
| '(' expr ')' { $$ = $2; }
;
%%
/* Lexical Analyzer (Flex section) */
%{
#include "y.tab.h"
%}
%%
[0-9]+ { yylval
= atoi
(yytext
); return
NUMBER; } "+" { return '+'; }
"-" { return '-'; }
"*" { return '*'; }
"/" { return '/'; }
"(" { return '('; }
")" { return ')'; }
[ \t\n] { /* Ignore whitespace */ }
. { printf("Unexpected character: %s\n", yytext); return 0; }
%%
/* Error handling */
void yyerror(char *s) {
fprintf(stderr, "%s\n", s);
}
int main(void) {
printf("Enter an arithmetic expression: ");
if (yyparse() == 0) {
printf("Valid arithmetic expression\n");
} else {
printf("Invalid arithmetic expression\n");
}
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCB5eWxleCh2b2lkKTsKdm9pZCB5eWVycm9yKGNoYXIgKnMpOwolfQoKJXRva2VuIE5VTUJFUgolbGVmdCAnKycgJy0nCiVsZWZ0ICcqJyAnLycKJWxlZnQgTkVHCgolJQoKZXhwcjoKICAgIGV4cHIgJysnIGV4cHIgIHsgJCQgPSAkMSArICQzOyB9CiAgfCBleHByICctJyBleHByICB7ICQkID0gJDEgLSAkMzsgfQogIHwgZXhwciAnKicgZXhwciAgeyAkJCA9ICQxICogJDM7IH0KICB8IGV4cHIgJy8nIGV4cHIgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJDMgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB5eWVycm9yKCJFcnJvcjogRGl2aXNpb24gYnkgemVyby4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgWVlBQk9SVDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJCQgPSAkMSAvICQzOyAKICAgICAgICAgICAgICAgICAgfQogIHwgJygnIGV4cHIgJyknICAgeyAkJCA9ICQyOyB9CiAgfCBOVU1CRVIgICAgICAgICB7ICQkID0gJDE7IH0KICA7CgolJQoKLyogTGV4aWNhbCBBbmFseXplciAoRmxleCBzZWN0aW9uKSAqLwoKJXsKI2luY2x1ZGUgInkudGFiLmgiCiV9CgolJQpbMC05XSsgIHsgeXlsdmFsID0gYXRvaSh5eXRleHQpOyByZXR1cm4gTlVNQkVSOyB9CiIrIiAgICAgeyByZXR1cm4gJysnOyB9CiItIiAgICAgeyByZXR1cm4gJy0nOyB9CiIqIiAgICAgeyByZXR1cm4gJyonOyB9CiIvIiAgICAgeyByZXR1cm4gJy8nOyB9CiIoIiAgICAgeyByZXR1cm4gJygnOyB9CiIpIiAgICAgeyByZXR1cm4gJyknOyB9ClsgXHRcbl0geyAvKiBJZ25vcmUgd2hpdGVzcGFjZSAqLyB9Ci4gICAgICAgeyBwcmludGYoIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAlc1xuIiwgeXl0ZXh0KTsgcmV0dXJuIDA7IH0KJSUKCi8qIEVycm9yIGhhbmRsaW5nICovCnZvaWQgeXllcnJvcihjaGFyICpzKSB7CiAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzKTsKfQoKaW50IG1haW4odm9pZCkgewogICAgcHJpbnRmKCJFbnRlciBhbiBhcml0aG1ldGljIGV4cHJlc3Npb246ICIpOwogICAgaWYgKHl5cGFyc2UoKSA9PSAwKSB7CiAgICAgICAgcHJpbnRmKCJWYWxpZCBhcml0aG1ldGljIGV4cHJlc3Npb25cbiIpOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIkludmFsaWQgYXJpdGhtZXRpYyBleHByZXNzaW9uXG4iKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==