%{
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Declare yylval as a union type to hold numbers (doubles)
union {
double num;
} yylval;
// Function to handle errors
void yyerror(const char *s);
%}
%option noyywrap
DIGIT [0-9]
ID [a-zA-Z_][a-zA-Z0-9_]*
%%
"1" { return 1; }
"2" { return 2; }
"3" { return 3; }
"4" { return 4; }
"5" { return 5; }
"6" { return 6; }
"7" { return 7; }
"+" { return '+'; }
"-" { return '-'; }
"*" { return '*'; }
"SQRT" { return 'S'; }
"CQRT" { return 'C'; }
{NUMBER} { yylval
.num
= atof
(yytext
); return
'N'; } . { return yytext[0]; }
%%
// Main function to interact with the user and execute the chosen operation
int main() {
int choice;
double num1, num2, result;
printf("Select an operation:\n");
printf("1. Addition (+)\n");
printf("2. Subtraction (-)\n");
printf("3. Multiplication (*)\n");
printf
("
4. Square Root
(SQRT)\n"
); printf("5. Cube Root (CQRT)\n");
printf("6. Exit\n");
// Read the user
's choice scanf("%d", &choice);
switch(choice) {
case 1: // Addition
printf("Enter two numbers: ");
scanf("%lf %lf", &num1, &num2);
result = num1 + num2;
printf("Result: %.2f\n", result);
break;
case 2: // Subtraction
printf("Enter two numbers: ");
scanf("%lf %lf", &num1, &num2);
result = num1 - num2;
printf("Result: %.2f\n", result);
break;
case 3: // Multiplication
printf("Enter two numbers: ");
scanf("%lf %lf", &num1, &num2);
result = num1 * num2;
printf("Result: %.2f\n", result);
break;
case 4: // Square Root
printf("Enter a number: ");
scanf("%lf", &num1);
if (num1 < 0) {
printf("Error: Cannot take square root of a negative number.\n");
} else {
result = sqrt(num1);
printf("Square Root: %.2f\n", result);
}
break;
case 5: // Cube Root
printf("Enter a number: ");
scanf("%lf", &num1);
result = cbrt(num1);
printf("Cube Root: %.2f\n", result);
break;
case 6: // Exit
printf("Exiting the program.\n");
return 0;
default:
printf("Invalid choice!\n");
break;
}
return 0;
}
// Error handling function
void yyerror(const char *s) {
fprintf(stderr, "%s\n", s);
exit(1);
ICV7CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgovLyBEZWNsYXJlIHl5bHZhbCBhcyBhIHVuaW9uIHR5cGUgdG8gaG9sZCBudW1iZXJzIChkb3VibGVzKQp1bmlvbiB7CiAgICBkb3VibGUgbnVtOwp9IHl5bHZhbDsKCi8vIEZ1bmN0aW9uIHRvIGhhbmRsZSBlcnJvcnMKdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKnMpOwolfQoKJW9wdGlvbiBub3l5d3JhcAoKRElHSVQgWzAtOV0KTlVNQkVSICAge0RJR0lUfSsoXC57RElHSVR9Kyk/CklEICAgICAgW2EtekEtWl9dW2EtekEtWjAtOV9dKgolJQoKIjEiICAgeyByZXR1cm4gMTsgfQoiMiIgICB7IHJldHVybiAyOyB9CiIzIiAgIHsgcmV0dXJuIDM7IH0KIjQiICAgeyByZXR1cm4gNDsgfQoiNSIgICB7IHJldHVybiA1OyB9CiI2IiAgIHsgcmV0dXJuIDY7IH0KIjciICAgeyByZXR1cm4gNzsgfQoiKyIgICB7IHJldHVybiAnKyc7IH0KIi0iICAgeyByZXR1cm4gJy0nOyB9CiIqIiAgIHsgcmV0dXJuICcqJzsgfQoiU1FSVCIgeyByZXR1cm4gJ1MnOyB9CiJDUVJUIiB7IHJldHVybiAnQyc7IH0Ke05VTUJFUn0gIHsgeXlsdmFsLm51bSA9IGF0b2YoeXl0ZXh0KTsgcmV0dXJuICdOJzsgfQouICAgeyByZXR1cm4geXl0ZXh0WzBdOyB9CgolJQoKLy8gTWFpbiBmdW5jdGlvbiB0byBpbnRlcmFjdCB3aXRoIHRoZSB1c2VyIGFuZCBleGVjdXRlIHRoZSBjaG9zZW4gb3BlcmF0aW9uCmludCBtYWluKCkgewogICAgaW50IGNob2ljZTsKICAgIGRvdWJsZSBudW0xLCBudW0yLCByZXN1bHQ7CgogICAgcHJpbnRmKCJTZWxlY3QgYW4gb3BlcmF0aW9uOlxuIik7CiAgICBwcmludGYoIjEuIEFkZGl0aW9uICgrKVxuIik7CiAgICBwcmludGYoIjIuIFN1YnRyYWN0aW9uICgtKVxuIik7CiAgICBwcmludGYoIjMuIE11bHRpcGxpY2F0aW9uICgqKVxuIik7CiAgICBwcmludGYoIjQuIFNxdWFyZSBSb290IChTUVJUKVxuIik7CiAgICBwcmludGYoIjUuIEN1YmUgUm9vdCAoQ1FSVClcbiIpOwogICAgcHJpbnRmKCI2LiBFeGl0XG4iKTsKCiAgICAvLyBSZWFkIHRoZSB1c2VyJ3MgY2hvaWNlCiAgICBzY2FuZigiJWQiLCAmY2hvaWNlKTsKICAgCiAgICBzd2l0Y2goY2hvaWNlKSB7CiAgICAgICAgY2FzZSAxOiAvLyBBZGRpdGlvbgogICAgICAgICAgICBwcmludGYoIkVudGVyIHR3byBudW1iZXJzOiAiKTsKICAgICAgICAgICAgc2NhbmYoIiVsZiAlbGYiLCAmbnVtMSwgJm51bTIpOwogICAgICAgICAgICByZXN1bHQgPSBudW0xICsgbnVtMjsKICAgICAgICAgICAgcHJpbnRmKCJSZXN1bHQ6ICUuMmZcbiIsIHJlc3VsdCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDI6IC8vIFN1YnRyYWN0aW9uCiAgICAgICAgICAgIHByaW50ZigiRW50ZXIgdHdvIG51bWJlcnM6ICIpOwogICAgICAgICAgICBzY2FuZigiJWxmICVsZiIsICZudW0xLCAmbnVtMik7CiAgICAgICAgICAgIHJlc3VsdCA9IG51bTEgLSBudW0yOwogICAgICAgICAgICBwcmludGYoIlJlc3VsdDogJS4yZlxuIiwgcmVzdWx0KTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMzogLy8gTXVsdGlwbGljYXRpb24KICAgICAgICAgICAgcHJpbnRmKCJFbnRlciB0d28gbnVtYmVyczogIik7CiAgICAgICAgICAgIHNjYW5mKCIlbGYgJWxmIiwgJm51bTEsICZudW0yKTsKICAgICAgICAgICAgcmVzdWx0ID0gbnVtMSAqIG51bTI7CiAgICAgICAgICAgIHByaW50ZigiUmVzdWx0OiAlLjJmXG4iLCByZXN1bHQpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA0OiAvLyBTcXVhcmUgUm9vdAogICAgICAgICAgICBwcmludGYoIkVudGVyIGEgbnVtYmVyOiAiKTsKICAgICAgICAgICAgc2NhbmYoIiVsZiIsICZudW0xKTsKICAgICAgICAgICAgaWYgKG51bTEgPCAwKSB7CiAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yOiBDYW5ub3QgdGFrZSBzcXVhcmUgcm9vdCBvZiBhIG5lZ2F0aXZlIG51bWJlci5cbiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gc3FydChudW0xKTsKICAgICAgICAgICAgICAgIHByaW50ZigiU3F1YXJlIFJvb3Q6ICUuMmZcbiIsIHJlc3VsdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgNTogLy8gQ3ViZSBSb290CiAgICAgICAgICAgIHByaW50ZigiRW50ZXIgYSBudW1iZXI6ICIpOwogICAgICAgICAgICBzY2FuZigiJWxmIiwgJm51bTEpOwogICAgICAgICAgICByZXN1bHQgPSBjYnJ0KG51bTEpOwogICAgICAgICAgICBwcmludGYoIkN1YmUgUm9vdDogJS4yZlxuIiwgcmVzdWx0KTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgNjogLy8gRXhpdAogICAgICAgICAgICBwcmludGYoIkV4aXRpbmcgdGhlIHByb2dyYW0uXG4iKTsKICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBjaG9pY2UhXG4iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCi8vIEVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uCnZvaWQgeXllcnJvcihjb25zdCBjaGFyICpzKSB7CiAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzKTsKICAgIGV4aXQoMSk7