%{
#include <stdio.h>
#include <stdlib.h>
int a[] = {0, 0, 0, 0}, i, valid = 1, opnd = 0;
void ext() {
printf("Invalid Expression\n");
exit(0);
}
%}
%x OPER
%%
[0-9]+ { BEGIN OPER; opnd++; }
<OPER>"+" { if(valid) { valid = 0; i = 0; } else ext(); }
<OPER>"-" { if(valid) { valid = 0; i = 1; } else ext(); }
<OPER>"*" { if(valid) { valid = 0; i = 2; } else ext(); }
<OPER>"/" { if(valid) { valid = 0; i = 3; } else ext(); }
<OPER>[a-zA-Z0-9]+ {
opnd++;
if(valid == 0) {
valid = 1;
a[i]++;
} else {
ext();
}
}
<OPER>"\n" { if(valid == 0) ext(); else return 0; }
. { ext(); }
%%
int main() {
printf("Type the arithmetic expression:\n");
yylex();
printf("Valid Arithmetic Expression\n");
printf("No. of Operands/Identifiers: %d\n", opnd);
printf("No. of Additions: %d\nNo. of Subtractions: %d\n", a[0], a[1]);
printf("No. of Multiplications: %d\nNo. of Divisions: %d\n", a[2], a[3]);
return 0;
}
JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBhW10gPSB7MCwgMCwgMCwgMH0sIGksIHZhbGlkID0gMSwgb3BuZCA9IDA7Cgp2b2lkIGV4dCgpIHsKICAgIHByaW50ZigiSW52YWxpZCBFeHByZXNzaW9uXG4iKTsKICAgIGV4aXQoMCk7Cn0KJX0KCiV4IE9QRVIKJSUKClswLTldKyAgICAgICAgeyBCRUdJTiBPUEVSOyBvcG5kKys7IH0KPE9QRVI+IisiICAgICB7IGlmKHZhbGlkKSB7IHZhbGlkID0gMDsgaSA9IDA7IH0gZWxzZSBleHQoKTsgfQo8T1BFUj4iLSIgICAgIHsgaWYodmFsaWQpIHsgdmFsaWQgPSAwOyBpID0gMTsgfSBlbHNlIGV4dCgpOyB9CjxPUEVSPiIqIiAgICAgeyBpZih2YWxpZCkgeyB2YWxpZCA9IDA7IGkgPSAyOyB9IGVsc2UgZXh0KCk7IH0KPE9QRVI+Ii8iICAgICB7IGlmKHZhbGlkKSB7IHZhbGlkID0gMDsgaSA9IDM7IH0gZWxzZSBleHQoKTsgfQo8T1BFUj5bYS16QS1aMC05XSsgeyAKICAgIG9wbmQrKzsKICAgIGlmKHZhbGlkID09IDApIHsKICAgICAgICB2YWxpZCA9IDE7IAogICAgICAgIGFbaV0rKzsKICAgIH0gZWxzZSB7CiAgICAgICAgZXh0KCk7CiAgICB9Cn0KPE9QRVI+IlxuIiAgICB7IGlmKHZhbGlkID09IDApIGV4dCgpOyBlbHNlIHJldHVybiAwOyB9Ci4gICAgICAgICAgICAgeyBleHQoKTsgfQoKJSUKCmludCBtYWluKCkgewogICAgcHJpbnRmKCJUeXBlIHRoZSBhcml0aG1ldGljIGV4cHJlc3Npb246XG4iKTsKICAgIHl5bGV4KCk7CiAgICAKICAgIHByaW50ZigiVmFsaWQgQXJpdGhtZXRpYyBFeHByZXNzaW9uXG4iKTsKICAgIHByaW50ZigiTm8uIG9mIE9wZXJhbmRzL0lkZW50aWZpZXJzOiAlZFxuIiwgb3BuZCk7CiAgICBwcmludGYoIk5vLiBvZiBBZGRpdGlvbnM6ICVkXG5Oby4gb2YgU3VidHJhY3Rpb25zOiAlZFxuIiwgYVswXSwgYVsxXSk7CiAgICBwcmludGYoIk5vLiBvZiBNdWx0aXBsaWNhdGlvbnM6ICVkXG5Oby4gb2YgRGl2aXNpb25zOiAlZFxuIiwgYVsyXSwgYVszXSk7CgogICAgcmV0dXJuIDA7Cn0K