%{
#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"); }
    | '-' NUMBER      { printf("Negative Number\n"); }
    | '-' ID         { printf("Negative Identifier\n"); }
    | '(' expr ')'   { /* Parentheses handling */ }
    | NUMBER
    | 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);
}