/* Lex program to recognize valid arithmetic expression
and identify the identifiers and operators */
%{
#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;
}
LyogTGV4IHByb2dyYW0gdG8gcmVjb2duaXplIHZhbGlkIGFyaXRobWV0aWMgZXhwcmVzc2lvbgoJCWFuZCBpZGVudGlmeSB0aGUgaWRlbnRpZmllcnMgYW5kIG9wZXJhdG9ycyAqLwolewojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoJaW50IG9wZXJhdG9yc19jb3VudCA9IDAsIG9wZXJhbmRzX2NvdW50ID0gMCwgdmFsaWQgPSAxLCB0b3AgPSAtMSwgbCA9IDAsIGogPSAwOwoJY2hhciBvcGVyYW5kc1sxMF1bMTBdLCBvcGVyYXRvcnNbMTBdWzEwXSwgc3RhY2tbMTAwXTsKJX0KJSUKIigiIHsKCXRvcCsrOwoJc3RhY2tbdG9wXSA9ICcoJzsKfQoieyIgewoJdG9wKys7CglzdGFja1t0b3BdID0gJ3snOwp9CiJbIiB7Cgl0b3ArKzsKCXN0YWNrW3RvcF0gPSAnWyc7Cn0KIikiIHsKCWlmIChzdGFja1t0b3BdICE9ICcoJykgewoJCXZhbGlkID0gMDsJCgl9CgllbHNlIGlmKG9wZXJhbmRzX2NvdW50PjAgJiYgKG9wZXJhbmRzX2NvdW50LW9wZXJhdG9yc19jb3VudCkhPTEpewoJCXZhbGlkPTA7Cgl9CgllbHNlewoJCXRvcC0tOwoJCW9wZXJhbmRzX2NvdW50PTE7CgkJb3BlcmF0b3JzX2NvdW50PTA7Cgl9Cn0KIn0iIHsKCWlmIChzdGFja1t0b3BdICE9ICd7JykgewoJCXZhbGlkID0gMDsJCgl9CgllbHNlIGlmKG9wZXJhbmRzX2NvdW50PjAgJiYgKG9wZXJhbmRzX2NvdW50LW9wZXJhdG9yc19jb3VudCkhPTEpewoJCXZhbGlkPTA7Cgl9CgllbHNlewoJCXRvcC0tOwoJCW9wZXJhbmRzX2NvdW50PTE7CgkJb3BlcmF0b3JzX2NvdW50PTA7Cgl9Cn0KIl0iIHsKCWlmIChzdGFja1t0b3BdICE9ICdbJykgewoJCXZhbGlkID0gMDsKCX0KCWVsc2UgaWYob3BlcmFuZHNfY291bnQ+MCAmJiAob3BlcmFuZHNfY291bnQtb3BlcmF0b3JzX2NvdW50KSE9MSl7CgkJdmFsaWQ9MDsKCX0KCWVsc2V7CgkJdG9wLS07CgkJb3BlcmFuZHNfY291bnQ9MTsKCQlvcGVyYXRvcnNfY291bnQ9MDsKCX0KCQkKfQoiKyJ8Ii0ifCIqInwiLyIgewoJb3BlcmF0b3JzX2NvdW50Kys7CglzdHJjcHkob3BlcmF0b3JzW2xdLCB5eXRleHQpOwoJbCsrOwp9ClswLTldK3xbYS16QS1aXVthLXpBLVowLTlfXSogewoJb3BlcmFuZHNfY291bnQrKzsKCXN0cmNweShvcGVyYW5kc1tqXSwgeXl0ZXh0KTsKCWorKzsKfQolJQoKCmludCB5eXdyYXAoKQp7CglyZXR1cm4gMTsKfQppbnQgbWFpbigpCnsKCWludCBrOwoJcHJpbnRmKCJFbnRlciB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uOiAiKTsKCXl5bGV4KCk7CgoJaWYgKHZhbGlkID09IDEgJiYgdG9wID09IC0xKSB7CgkJcHJpbnRmKCJcblZhbGlkIEV4cHJlc3Npb25cbiIpOwoJfQoJZWxzZQoJCXByaW50ZigiXG5JbnZhbGlkIEV4cHJlc3Npb25cbiIpOwoKCXJldHVybiAwOwp9Cg==