%{
#include <stdio.h>
#include <string.h>
int operators_count = 0, operands_count = 0, valid = 1, top = -1, l = 0, j = 0;
char operands[10][10], operators[10][10], stack[100];
%}
%%
"(" {
top++;
stack[top] = '(';
}
"{" {
top++;
stack[top] = '{';
}
"[" {
top++;
stack[top] = '[';
}
")" {
if (stack[top] != '(') {
valid = 0;
}
else if(operands_count>0 && (operands_count-operators_count)!=1){
valid=0;
}
else{
top--;
operands_count=1;
operators_count=0;
}
}
"}" {
if (stack[top] != '{') {
valid = 0;
}
else if(operands_count>0 && (operands_count-operators_count)!=1){
valid=0;
}
else{
top--;
operands_count=1;
operators_count=0;
}
}
"]" {
if (stack[top] != '[') {
valid = 0;
}
else if(operands_count>0 && (operands_count-operators_count)!=1){
valid=0;
}
else{
top--;
operands_count=1;
operators_count=0;
}
}
"+"|"-"|"*"|"/" {
operators_count++;
strcpy(operators[l], yytext);
l++;
}
[0-9]+|[a-zA-Z][a-zA-Z0-9_]* {
operands_count++;
strcpy(operands[j], yytext);
j++;
}
%%
int yywrap()
{
return 1;
}
int main()
{
int k;
printf("Enter the arithmetic expression: ");
yylex();
if (valid == 1 && top == -1) {
printf("\nValid Expression\n");
}
else
printf("\nInvalid Expression\n");
return 0;
}
JXsgCiNpbmNsdWRlIDxzdGRpby5oPiAKI2luY2x1ZGUgPHN0cmluZy5oPiAKICAgIGludCBvcGVyYXRvcnNfY291bnQgPSAwLCBvcGVyYW5kc19jb3VudCA9IDAsIHZhbGlkID0gMSwgdG9wID0gLTEsIGwgPSAwLCBqID0gMDsgCiAgICBjaGFyIG9wZXJhbmRzWzEwXVsxMF0sIG9wZXJhdG9yc1sxMF1bMTBdLCBzdGFja1sxMDBdOyAKJX0gCiUlCiIoIiB7IAogICAgdG9wKys7IAogICAgc3RhY2tbdG9wXSA9ICcoJzsgCn0gCiJ7IiB7CiAgICB0b3ArKzsgCiAgICBzdGFja1t0b3BdID0gJ3snOyAKfSAKIlsiIHsgCiAgICB0b3ArKzsgCiAgICBzdGFja1t0b3BdID0gJ1snOyAKfSAKIikiIHsgCiAgICBpZiAoc3RhY2tbdG9wXSAhPSAnKCcpIHsgCiAgICAgICAgdmFsaWQgPSAwOyAgICAgCiAgICB9IAogICAgZWxzZSBpZihvcGVyYW5kc19jb3VudD4wICYmIChvcGVyYW5kc19jb3VudC1vcGVyYXRvcnNfY291bnQpIT0xKXsKICAgICAgICB2YWxpZD0wOwogICAgfQogICAgZWxzZXsKICAgICAgICB0b3AtLTsKICAgICAgICBvcGVyYW5kc19jb3VudD0xOwogICAgICAgIG9wZXJhdG9yc19jb3VudD0wOwogICAgfSAKfSAKIn0iIHsgCiAgICBpZiAoc3RhY2tbdG9wXSAhPSAneycpIHsgCiAgICAgICAgdmFsaWQgPSAwOyAgICAgCiAgICB9IAogICAgZWxzZSBpZihvcGVyYW5kc19jb3VudD4wICYmIChvcGVyYW5kc19jb3VudC1vcGVyYXRvcnNfY291bnQpIT0xKXsKICAgICAgICB2YWxpZD0wOwogICAgfQogICAgZWxzZXsKICAgICAgICB0b3AtLTsKICAgICAgICBvcGVyYW5kc19jb3VudD0xOwogICAgICAgIG9wZXJhdG9yc19jb3VudD0wOwogICAgfSAKfSAKIl0iIHsgCiAgICBpZiAoc3RhY2tbdG9wXSAhPSAnWycpIHsgCiAgICAgICAgdmFsaWQgPSAwOyAKICAgIH0gCiAgICBlbHNlIGlmKG9wZXJhbmRzX2NvdW50PjAgJiYgKG9wZXJhbmRzX2NvdW50LW9wZXJhdG9yc19jb3VudCkhPTEpewogICAgICAgIHZhbGlkPTA7CiAgICB9CiAgICBlbHNlewogICAgICAgIHRvcC0tOwogICAgICAgIG9wZXJhbmRzX2NvdW50PTE7CiAgICAgICAgb3BlcmF0b3JzX2NvdW50PTA7CiAgICB9IAogICAgICAgICAgCn0gCiIrInwiLSJ8IioifCIvIiB7IAogICAgb3BlcmF0b3JzX2NvdW50Kys7IAogICAgc3RyY3B5KG9wZXJhdG9yc1tsXSwgeXl0ZXh0KTsgCiAgICBsKys7IAp9IApbMC05XSt8W2EtekEtWl1bYS16QS1aMC05X10qIHsgCiAgICBvcGVyYW5kc19jb3VudCsrOyAKICAgIHN0cmNweShvcGVyYW5kc1tqXSwgeXl0ZXh0KTsgCiAgICBqKys7IAp9IAolJSAKICAKICAKaW50IHl5d3JhcCgpIAp7IAogICAgcmV0dXJuIDE7IAp9IAppbnQgbWFpbigpIAp7IAogICAgaW50IGs7IAogICAgcHJpbnRmKCJFbnRlciB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uOiAiKTsgCiAgICB5eWxleCgpOyAKICAKICAgIGlmICh2YWxpZCA9PSAxICYmIHRvcCA9PSAtMSkgeyAKICAgICAgICBwcmludGYoIlxuVmFsaWQgRXhwcmVzc2lvblxuIik7IAogICAgfSAKICAgIGVsc2UKICAgICAgICBwcmludGYoIlxuSW52YWxpZCBFeHByZXNzaW9uXG4iKTsgCiAgCiAgICByZXR1cm4gMDsKfSA=