%{
#include <stdio.h>
#include <stdlib.h>
extern int yylex();
int yyerror(const char *s);
%}
%token NUMBER ID
%left '+' '-'
%left '%' '*' '/'
%left '(' ')'
%%
expr:
expr '+' expr { printf("Addition\n"); }
| expr '-' expr { printf("Subtraction\n"); }
| expr '*' expr { printf("Multiplication\n"); }
| expr '/' expr { printf("Division\n"); }
| expr '%' expr { printf("Modulo\n"); }
| '-' ID { printf("Negative Identifier\n"); }
| '(' expr ')' { /* Parentheses handling */ }
| ID
;
%%
// Main function
int main() {
printf("Enter the expression:\n");
yyparse();
printf
("\nExpression
is valid\n"
); return 0;
}
// Error handling function
int yyerror(const char *s) {
printf
("\nExpression
is invalid\n"
); exit(1);
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmV4dGVybiBpbnQgeXlsZXgoKTsKaW50IHl5ZXJyb3IoY29uc3QgY2hhciAqcyk7CiV9CgoldG9rZW4gTlVNQkVSIElECiVsZWZ0ICcrJyAnLScKJWxlZnQgJyUnICcqJyAnLycKJWxlZnQgJygnICcpJwoKJSUKZXhwcjoKICAgICAgZXhwciAnKycgZXhwciAgIHsgcHJpbnRmKCJBZGRpdGlvblxuIik7IH0KICAgIHwgZXhwciAnLScgZXhwciAgIHsgcHJpbnRmKCJTdWJ0cmFjdGlvblxuIik7IH0KICAgIHwgZXhwciAnKicgZXhwciAgIHsgcHJpbnRmKCJNdWx0aXBsaWNhdGlvblxuIik7IH0KICAgIHwgZXhwciAnLycgZXhwciAgIHsgcHJpbnRmKCJEaXZpc2lvblxuIik7IH0KICAgIHwgZXhwciAnJScgZXhwciAgIHsgcHJpbnRmKCJNb2R1bG9cbiIpOyB9CiAgICB8ICctJyBOVU1CRVIgICAgICB7IHByaW50ZigiTmVnYXRpdmUgTnVtYmVyXG4iKTsgfQogICAgfCAnLScgSUQgICAgICAgICB7IHByaW50ZigiTmVnYXRpdmUgSWRlbnRpZmllclxuIik7IH0KICAgIHwgJygnIGV4cHIgJyknICAgeyAvKiBQYXJlbnRoZXNlcyBoYW5kbGluZyAqLyB9CiAgICB8IE5VTUJFUgogICAgfCBJRAogICAgOwoKJSUKCi8vIE1haW4gZnVuY3Rpb24KaW50IG1haW4oKSB7CiAgICBwcmludGYoIkVudGVyIHRoZSBleHByZXNzaW9uOlxuIik7CiAgICB5eXBhcnNlKCk7CiAgICBwcmludGYoIlxuRXhwcmVzc2lvbiBpcyB2YWxpZFxuIik7CiAgICByZXR1cm4gMDsKfQoKLy8gRXJyb3IgaGFuZGxpbmcgZnVuY3Rpb24KaW50IHl5ZXJyb3IoY29uc3QgY2hhciAqcykgewogICAgcHJpbnRmKCJcbkV4cHJlc3Npb24gaXMgaW52YWxpZFxuIik7CiAgICBleGl0KDEpOwp9