%{
#include<stdio.h>
#include<stdlib.h>
#include "y.tab.h"
#include<math.h>
%}
%%
"tan" { return TAN; }
"cosec" { return COSEC; }
"sec" { return SEC; }
"cot" { return COT; }
"ln" { return LN; }
"cube" { return CUBE; }
"sa" { return SA; }
[0-9]+ { yylval.p = atof(yytext); return NUM; }
[ \t\n]+ ;
. { return yytext[0]; }
%%
int yywrap() {
return 1;
}
%{
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
%}
%token SIN COS TAN COSEC SEC COT LOG LN SQRT CUBE SA NUM
%union { double p; }
%left '+' '-'
%left '*' '/'
%type <p> E NUM
%%
stmt
: E
{ printf
("Answer
is %g\n", $1); };
E: E '+' E { $$ = $1 + $3; }
| E '-' E { $$ = $1 - $3; }
| E '*' E { $$ = $1 * $3; }
| E '/' E { $$ = $1 / $3; }
| '(' E ')' { $$ = $2; }
| SIN '(' E
')' { $$
= sin($
3); } | COS '(' E
')' { $$
= cos($
3); } | TAN '(' E ')' { $$ = tan($3); }
| COSEC
'(' E
')' { $$
= 1 / sin($
3); } | SEC
'(' E
')' { $$
= 1 / cos($
3); } | COT '(' E ')' { $$ = 1 / tan($3); }
| LOG '(' E
')' { $$
= log10
($
3); } | LN
'(' E
')' { $$
= log($
3); } | SA '(' E ')' { $$ = 4 * M_PI * $3 * $3; }
| CUBE '(' E ')' { $$ = $3 * $3 * $3; }
| NUM { $$ = $1; }
;
%%
int main() {
printf("Enter the string: ");
yyparse();
return 0;
}
void yyerror(char *s) {
printf("Not accepted: %s\n", s);
exit(0);
}
JXsKI2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlICJ5LnRhYi5oIgojaW5jbHVkZTxtYXRoLmg+CiV9CiUlCiJzaW4iIHsgcmV0dXJuIFNJTjsgfQoiY29zIiB7IHJldHVybiBDT1M7IH0KInRhbiIgeyByZXR1cm4gVEFOOyB9CiJjb3NlYyIgeyByZXR1cm4gQ09TRUM7IH0KInNlYyIgeyByZXR1cm4gU0VDOyB9CiJjb3QiIHsgcmV0dXJuIENPVDsgfQoibG9nIiB7IHJldHVybiBMT0c7IH0KImxuIiB7IHJldHVybiBMTjsgfQoic3FydCIgeyByZXR1cm4gU1FSVDsgfQoiY3ViZSIgeyByZXR1cm4gQ1VCRTsgfQoic2EiIHsgcmV0dXJuIFNBOyB9ClswLTldKyB7IHl5bHZhbC5wID0gYXRvZih5eXRleHQpOyByZXR1cm4gTlVNOyB9ClsgXHRcbl0rIDsKLiB7IHJldHVybiB5eXRleHRbMF07IH0KJSUKaW50IHl5d3JhcCgpIHsKcmV0dXJuIDE7Cn0KCiV7CiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgojaW5jbHVkZTxtYXRoLmg+CiV9CiV0b2tlbiBTSU4gQ09TIFRBTiBDT1NFQyBTRUMgQ09UIExPRyBMTiBTUVJUIENVQkUgU0EgTlVNCiV1bmlvbiB7IGRvdWJsZSBwOyB9CiVsZWZ0ICcrJyAnLScKJWxlZnQgJyonICcvJwoldHlwZSA8cD4gRSBOVU0KJSUKc3RtdDogRSB7IHByaW50ZigiQW5zd2VyIGlzICVnXG4iLCAkMSk7IH0KOwpFOiBFICcrJyBFIHsgJCQgPSAkMSArICQzOyB9CnwgRSAnLScgRSB7ICQkID0gJDEgLSAkMzsgfQp8IEUgJyonIEUgeyAkJCA9ICQxICogJDM7IH0KfCBFICcvJyBFIHsgJCQgPSAkMSAvICQzOyB9CnwgJygnIEUgJyknIHsgJCQgPSAkMjsgfQp8IFNJTiAnKCcgRSAnKScgeyAkJCA9IHNpbigkMyk7IH0KfCBDT1MgJygnIEUgJyknIHsgJCQgPSBjb3MoJDMpOyB9CnwgVEFOICcoJyBFICcpJyB7ICQkID0gdGFuKCQzKTsgfQp8IENPU0VDICcoJyBFICcpJyB7ICQkID0gMSAvIHNpbigkMyk7IH0KfCBTRUMgJygnIEUgJyknIHsgJCQgPSAxIC8gY29zKCQzKTsgfQp8IENPVCAnKCcgRSAnKScgeyAkJCA9IDEgLyB0YW4oJDMpOyB9CnwgTE9HICcoJyBFICcpJyB7ICQkID0gbG9nMTAoJDMpOyB9CnwgTE4gJygnIEUgJyknIHsgJCQgPSBsb2coJDMpOyB9CnwgU1FSVCAnKCcgRSAnKScgeyAkJCA9IHNxcnQoJDMpOyB9CnwgU0EgJygnIEUgJyknIHsgJCQgPSA0ICogTV9QSSAqICQzICogJDM7IH0KfCBDVUJFICcoJyBFICcpJyB7ICQkID0gJDMgKiAkMyAqICQzOyB9CnwgTlVNIHsgJCQgPSAkMTsgfQo7CiUlCmludCBtYWluKCkgewpwcmludGYoIkVudGVyIHRoZSBzdHJpbmc6ICIpOwp5eXBhcnNlKCk7CnJldHVybiAwOwp9CnZvaWQgeXllcnJvcihjaGFyICpzKSB7CnByaW50ZigiTm90IGFjY2VwdGVkOiAlc1xuIiwgcyk7CmV4aXQoMCk7Cn0K