%{
#include <stdio.h>
#include <string.h>
int op_flag = 0; // to detect two operators in a row
int valid = 1; // assume valid until proven otherwise
int balance = 0; // parenthesis balance counter
%}
%%
[0-9]+ { op_flag = 0; } /* number */
[a-zA-Z]+ { op_flag = 0; } /* identifier */
[+\-*/] {
if(op_flag == 1) valid = 0; // two operators in a row
op_flag = 1;
}
"(" { balance++; op_flag = 0; }
")" { balance--; if(balance < 0) valid = 0; op_flag = 0; }
[ \t\n]+ ; /* ignore whitespaces */
. { valid = 0; } /* any other symbol → invalid */
%%
int main()
{
printf("Enter mathematical expression: ");
yylex();
if(balance != 0)
valid = 0;
if(valid)
printf("\nValid Expression\n");
else
printf("\nInvalid Expression\n");
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBvcF9mbGFnID0gMDsgICAgICAgIC8vIHRvIGRldGVjdCB0d28gb3BlcmF0b3JzIGluIGEgcm93CmludCB2YWxpZCA9IDE7ICAgICAgICAgLy8gYXNzdW1lIHZhbGlkIHVudGlsIHByb3ZlbiBvdGhlcndpc2UKaW50IGJhbGFuY2UgPSAwOyAgICAgICAvLyBwYXJlbnRoZXNpcyBiYWxhbmNlIGNvdW50ZXIKJX0KCiUlCgpbMC05XSsgICAgICAgICAgICAgICAgICB7IG9wX2ZsYWcgPSAwOyB9ICAgICAgICAgLyogbnVtYmVyICovClthLXpBLVpdKyAgICAgICAgICAgICAgIHsgb3BfZmxhZyA9IDA7IH0gICAgICAgICAvKiBpZGVudGlmaWVyICovCgpbK1wtKi9dICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9wX2ZsYWcgPT0gMSkgdmFsaWQgPSAwOyAgLy8gdHdvIG9wZXJhdG9ycyBpbiBhIHJvdwogICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9mbGFnID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKIigiICAgICAgICAgICAgICAgICAgICAgeyBiYWxhbmNlKys7IG9wX2ZsYWcgPSAwOyB9CiIpIiAgICAgICAgICAgICAgICAgICAgIHsgYmFsYW5jZS0tOyBpZihiYWxhbmNlIDwgMCkgdmFsaWQgPSAwOyBvcF9mbGFnID0gMDsgfQoKWyBcdFxuXSsgICAgICAgICAgICAgICAgOyAgIC8qIGlnbm9yZSB3aGl0ZXNwYWNlcyAqLwoKLiAgICAgICAgICAgICAgICAgICAgICAgeyB2YWxpZCA9IDA7IH0gIC8qIGFueSBvdGhlciBzeW1ib2wg4oaSIGludmFsaWQgKi8KCiUlCgppbnQgbWFpbigpCnsKICAgIHByaW50ZigiRW50ZXIgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb246ICIpOwogICAgeXlsZXgoKTsKCiAgICBpZihiYWxhbmNlICE9IDApCiAgICAgICAgdmFsaWQgPSAwOwoKICAgIGlmKHZhbGlkKQogICAgICAgIHByaW50ZigiXG5WYWxpZCBFeHByZXNzaW9uXG4iKTsKICAgIGVsc2UKICAgICAgICBwcmludGYoIlxuSW52YWxpZCBFeHByZXNzaW9uXG4iKTsKCiAgICByZXR1cm4gMDsKfQ==