Saturday, December 4, 2010

CALCULATOR

LEX PROGRAM

%{

%}
NUMBER (([0-9]+)|([0-9]+\.[0-9]+)|([0-9]+\.[0-9]+[e][0-9]+))
%%
{NUMBER} {yylval = atof(yytext); return NUMBER;}
"+" {return *yytext;}
"-" {return *yytext;}
"*" {return *yytext;}
"/" {return *yytext;}
"\n" {return *yytext;}
. {printf("\nother default\n");}
%%
int yywrap()
{
return 1;
}
/*
int main()
{i
yylex();
}
*/


YACC PROGRAM

%token NUMBER
%left '+' '-'
%left '*' '/'
%token '\n'
%{
#define YYSTYPE double
%}
%%
start : start expr '\n' { printf("\nValid expression...And corresponding value = %g\n",$2); }
| error '\n' { printf("\nError...\n"); }
|
;
expr : expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1 / $3; }
| NUMBER
;
%%
#include "lex.yy.c"
int main()
{
return yyparse();
}
void yyerror(char *s)
{
fprintf(stderr,"%s\n",s);
}

No comments:

Post a Comment