Code:
%{
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int operation = 0;
float operand1
= 0, operand2
= 0; void processOperand(int);
%}
digit [0-9]+(\.[0-9]+)?
addition "+"
subtraction "-"
multiplication "*"
division "/"
power "\^"
line_break \n
%%
{digit} { processOperand(); }
{addition} { operation = 1; }
{subtraction} { operation = 2; }
{multiplication} { operation = 3; }
{division} { operation = 4; }
{power} { operation = 5; }
{line_break} {
printf("The Answer: %f\n", operand1);
// Reset operands and operation after each calculation
operand1 = 0;
operand2 = 0;
operation = 0;
}
.|\t|\r { /* Ignore invalid characters */ }
%%
void processOperand() {
if (operation == 0) {
operand1 = atof(yytext);
} else {
operand2 = atof(yytext);
switch (operation) {
case 1:
operand1 += operand2;
break;
case 2:
operand1 -= operand2;
break;
case 3:
operand1 *= operand2;
break;
case 4:
if (operand2 != 0) {
operand1 /= operand2;
} else {
printf("Error: Division by zero!\n");
operand1 = 0;
}
break;
case 5:
operand1 = pow(operand1, operand2);
break;
default:
printf("Invalid operation.\n");
}
operation = 0;
}
}
int main() {
yylex();
return 0;
}
int yywrap() {
return 1;
}
Q29kZToKJXsKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KaW50IG9wZXJhdGlvbiA9IDA7CmZsb2F0IG9wZXJhbmQxID0gMCwgb3BlcmFuZDIgPSAwOwp2b2lkIHByb2Nlc3NPcGVyYW5kKGludCk7CiV9CmRpZ2l0IFswLTldKyhcLlswLTldKyk/CmFkZGl0aW9uICIrIgpzdWJ0cmFjdGlvbiAiLSIKbXVsdGlwbGljYXRpb24gIioiCmRpdmlzaW9uICIvIgpwb3dlciAiXF4iCmxpbmVfYnJlYWsgXG4KJSUKe2RpZ2l0fSB7IHByb2Nlc3NPcGVyYW5kKCk7IH0Ke2FkZGl0aW9ufSB7IG9wZXJhdGlvbiA9IDE7IH0Ke3N1YnRyYWN0aW9ufSB7IG9wZXJhdGlvbiA9IDI7IH0Ke211bHRpcGxpY2F0aW9ufSB7IG9wZXJhdGlvbiA9IDM7IH0Ke2RpdmlzaW9ufSB7IG9wZXJhdGlvbiA9IDQ7IH0Ke3Bvd2VyfSB7IG9wZXJhdGlvbiA9IDU7IH0Ke2xpbmVfYnJlYWt9IHsKIHByaW50ZigiVGhlIEFuc3dlcjogJWZcbiIsIG9wZXJhbmQxKTsKIC8vIFJlc2V0IG9wZXJhbmRzIGFuZCBvcGVyYXRpb24gYWZ0ZXIgZWFjaCBjYWxjdWxhdGlvbgogb3BlcmFuZDEgPSAwOwogb3BlcmFuZDIgPSAwOwogb3BlcmF0aW9uID0gMDsKfQoufFx0fFxyIHsgLyogSWdub3JlIGludmFsaWQgY2hhcmFjdGVycyAqLyB9CiUlCnZvaWQgcHJvY2Vzc09wZXJhbmQoKSB7CiBpZiAob3BlcmF0aW9uID09IDApIHsKIG9wZXJhbmQxID0gYXRvZih5eXRleHQpOwp9IGVsc2Ugewogb3BlcmFuZDIgPSBhdG9mKHl5dGV4dCk7CiBzd2l0Y2ggKG9wZXJhdGlvbikgewogY2FzZSAxOgogb3BlcmFuZDEgKz0gb3BlcmFuZDI7CiBicmVhazsKIGNhc2UgMjoKIG9wZXJhbmQxIC09IG9wZXJhbmQyOwogYnJlYWs7CiBjYXNlIDM6CiBvcGVyYW5kMSAqPSBvcGVyYW5kMjsKIGJyZWFrOwogY2FzZSA0OgogaWYgKG9wZXJhbmQyICE9IDApIHsKIG9wZXJhbmQxIC89IG9wZXJhbmQyOwogfSBlbHNlIHsKIHByaW50ZigiRXJyb3I6IERpdmlzaW9uIGJ5IHplcm8hXG4iKTsKIG9wZXJhbmQxID0gMDsKIH0KIGJyZWFrOwogY2FzZSA1Ogogb3BlcmFuZDEgPSBwb3cob3BlcmFuZDEsIG9wZXJhbmQyKTsKIGJyZWFrOwogZGVmYXVsdDoKIHByaW50ZigiSW52YWxpZCBvcGVyYXRpb24uXG4iKTsKIH0KIG9wZXJhdGlvbiA9IDA7CiB9Cn0KaW50IG1haW4oKSB7CiB5eWxleCgpOwogcmV0dXJuIDA7Cn0KaW50IHl5d3JhcCgpIHsKIHJldHVybiAxOwp9