%{
#undef yywrap
#define yywrap() 1
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int f1 = 0, f2 = 0;
char oper;
float op1
= 0, op2
= 0, ans
= 0;
void eval();
float deg_to_rad
(float degrees
); // Function to convert degrees to radians
%}
DIGIT [0-9]
NUM {DIGIT}+(\.{DIGIT}+)?
%%
{NUM} {
if (f1 == 0) {
op1 = atof(yytext);
f1 = 1;
} else if (f2 == -1) {
op2 = atof(yytext);
f2 = 1;
}
if (f1 == 1 && f2 == 1) {
eval();
f1 = 0;
f2 = 0;
}
}
oper = (char)*yytext;
f2 = -1;
}
[sS][il][nN]|[cC][oO][sS]|[tT][aA][nN] {
oper = *yytext; // Correctly assigns the operation based on the first character
f2 = -1;
}
[0-9](\.[0-9]+)?[lL][oO][gG] {
oper
= 'l'; // Recognizes
log as a valid operation
f2 = -1;
}
\n {
if (f1 == 1 && f2 == 1) {
eval();
f1 = 0;
f2 = 0;
}
}
%%
int main() {
yylex();
return 0;
}
return degrees * (M_PI / 180.0); // Convert degrees to radians
}
void eval() {
switch (oper) {
case '+':
ans = op1 + op2;
break;
case '-':
ans = op1 - op2;
break;
case '*':
ans = op1 * op2;
break;
case '/':
if (op2 == 0) {
printf("ERROR: Division by zero\n");
return;
} else {
ans = op1 / op2;
}
break;
case 'S':
ans
= sin(deg_to_rad
(op1
)); // Convert input to radians
break;
case 'C':
ans
= cos(deg_to_rad
(op1
)); // Convert input to radians
break;
case 't': // tan
case 'T':
ans = tan(deg_to_rad(op1)); // Convert input to radians
break;
case 'L':
break;
default:
printf("Operation not available\n");
break;
}
printf
("The answer
is = %f\n", ans);}
JXsKI3VuZGVmIHl5d3JhcAojZGVmaW5lIHl5d3JhcCgpIDEKI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBmMSA9IDAsIGYyID0gMDsKY2hhciBvcGVyOwpmbG9hdCBvcDEgPSAwLCBvcDIgPSAwLCBhbnMgPSAwOwoKdm9pZCBldmFsKCk7CmZsb2F0IGRlZ190b19yYWQoZmxvYXQgZGVncmVlcyk7IC8vIEZ1bmN0aW9uIHRvIGNvbnZlcnQgZGVncmVlcyB0byByYWRpYW5zCiV9CgpESUdJVCBbMC05XQpOVU0ge0RJR0lUfSsoXC57RElHSVR9Kyk/Ck9QIFsqLytcLV0KCiUlCgp7TlVNfSB7CiAgICBpZiAoZjEgPT0gMCkgewogICAgICAgIG9wMSA9IGF0b2YoeXl0ZXh0KTsKICAgICAgICBmMSA9IDE7CiAgICB9IGVsc2UgaWYgKGYyID09IC0xKSB7CiAgICAgICAgb3AyID0gYXRvZih5eXRleHQpOwogICAgICAgIGYyID0gMTsKICAgIH0KCiAgICBpZiAoZjEgPT0gMSAmJiBmMiA9PSAxKSB7CiAgICAgICAgZXZhbCgpOwogICAgICAgIGYxID0gMDsKICAgICAgICBmMiA9IDA7CiAgICB9Cn0KCntPUH0gewogICAgb3BlciA9IChjaGFyKSp5eXRleHQ7CiAgICBmMiA9IC0xOwp9Cgpbc1NdW2lsXVtuTl18W2NDXVtvT11bc1NdfFt0VF1bYUFdW25OXSB7CiAgICBvcGVyID0gKnl5dGV4dDsgIC8vIENvcnJlY3RseSBhc3NpZ25zIHRoZSBvcGVyYXRpb24gYmFzZWQgb24gdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgZjIgPSAtMTsKfQoKWzAtOV0oXC5bMC05XSspP1tsTF1bb09dW2dHXSB7CiAgICBvcGVyID0gJ2wnOyAvLyBSZWNvZ25pemVzIGxvZyBhcyBhIHZhbGlkIG9wZXJhdGlvbgogICAgZjIgPSAtMTsKfQoKXG4gewogICAgaWYgKGYxID09IDEgJiYgZjIgPT0gMSkgewogICAgICAgIGV2YWwoKTsKICAgICAgICBmMSA9IDA7CiAgICAgICAgZjIgPSAwOwogICAgfQp9CgolJQoKaW50IG1haW4oKSB7CiAgICB5eWxleCgpOwogICAgcmV0dXJuIDA7Cn0KCmZsb2F0IGRlZ190b19yYWQoZmxvYXQgZGVncmVlcykgewogICAgcmV0dXJuIGRlZ3JlZXMgKiAoTV9QSSAvIDE4MC4wKTsgLy8gQ29udmVydCBkZWdyZWVzIHRvIHJhZGlhbnMKfQoKdm9pZCBldmFsKCkgewogICAgc3dpdGNoIChvcGVyKSB7CiAgICAgICAgY2FzZSAnKyc6CiAgICAgICAgICAgIGFucyA9IG9wMSArIG9wMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICAgIGFucyA9IG9wMSAtIG9wMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnKic6CiAgICAgICAgICAgIGFucyA9IG9wMSAqIG9wMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgIGlmIChvcDIgPT0gMCkgewogICAgICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogRGl2aXNpb24gYnkgemVyb1xuIik7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhbnMgPSBvcDEgLyBvcDI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncyc6ICAvLyBzaW4KICAgICAgICBjYXNlICdTJzoKICAgICAgICAgICAgYW5zID0gc2luKGRlZ190b19yYWQob3AxKSk7ICAvLyBDb252ZXJ0IGlucHV0IHRvIHJhZGlhbnMKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnYyc6ICAvLyBjb3MKICAgICAgICBjYXNlICdDJzoKICAgICAgICAgICAgYW5zID0gY29zKGRlZ190b19yYWQob3AxKSk7ICAvLyBDb252ZXJ0IGlucHV0IHRvIHJhZGlhbnMKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndCc6ICAvLyB0YW4KICAgICAgICBjYXNlICdUJzoKICAgICAgICAgICAgYW5zID0gdGFuKGRlZ190b19yYWQob3AxKSk7ICAvLyBDb252ZXJ0IGlucHV0IHRvIHJhZGlhbnMKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbCc6ICAvLyBsb2cKICAgICAgICBjYXNlICdMJzoKICAgICAgICAgICAgYW5zID0gbG9nKG9wMSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHByaW50ZigiT3BlcmF0aW9uIG5vdCBhdmFpbGFibGVcbiIpOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHByaW50ZigiVGhlIGFuc3dlciBpcyA9ICVmXG4iLCBhbnMpOwp9