Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- int yylex(void);
- int t_count = 1;
- void yyerror(char *s)
- {
- fprintf(stderr,"%s\n",s);
- return;
- }
- char * generateToken(int i)
- {
- char* ch=(char*)malloc(sizeof(char)*5);
- sprintf(ch,"t%d",i++);
- return ch;
- }
- %}
- %union { double dval; char ivar[50]; }
- %token <ivar> DOUBLE
- %token <ivar> NAME
- %token <ivar> DIGITS
- %type <ivar> expr
- %type <ivar> term
- %left "+" "-"
- %left "*" "/"
- %left "(" ")"
- %%
- program:
- line program {
- }
- | line {
- }
- ;
- line:
- expr "\n" {
- t_count =1;
- }
- | NAME "=" expr "\n" {
- printf("%s = %s", $3,$1);
- t_count=1;
- }
- ;
- expr:
- expr "+" expr {
- char * x=generateToken(t_count);
- printf("%s = %s + %s",x,$1,$3);
- strcpy($$,x);
- }
- | expr "-" expr {
- strcpy($$,generateToken(t_count));
- printf("%s = %s - %s",$$,$1,$3);
- }
- | expr "*" expr {
- strcpy($$,generateToken(t_count));
- printf("%s = %s * %s",$$,$1,$3);
- }
- | expr "/" expr {
- strcpy($$,generateToken(t_count));
- printf("%s = %s / %s",$$,$1,$3);
- }
- | term {
- strcpy($$, $1);
- }
- | "(" expr ")" {
- strcpy($$,generateToken(t_count));
- printf("%s =( %s )" ,$$,$2);
- }
- ;
- term:
- NAME {
- strcpy($$, $1);
- }
- | DIGITS {
- strcpy($$, $1);
- }
- ;
- %%
- int main(void)
- {
- yyparse();
- return 0;
- }
Add Comment
Please, Sign In to add comment