About

Kannur University btech CSE study materials, question papers, syllabus . . .

Saturday, June 8, 2013

S6 CSE COMPILER LAB : PARSER FOR TYPE CHECKING

                                                     
                                   /*    PARSER FOR TYPE CHECKING   */

Yacc program

%{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *yytext;
%}
%token INT FLOAT CHAR ID SP
%left '+' '-'
%left '*' '/'
%left ','
%right '='
%%
S:DCL ST {printf("CHECKED\n");}
DCL:INT SP IIDS';'
    |FLOAT SP FIDS';'
    |CHAR SP CHIDS';'
    |DCL INT SP IIDS';'
    |DCL FLOAT SP FIDS';'
    |DCL CHAR SP CHIDS';'
   
CHIDS:ID {insert(yytext,1);}
      |CHIDS','ID {insert(yytext,1);}
   
IIDS:ID {insert(yytext,2);}
     |IIDS','ID {insert(yytext,2);}
  
FIDS:ID {insert(yytext,3);}
    |FIDS','ID {insert(yytext,3);}
  
ST:E';'
  |ST E';'

E:E'+'E {if(($$<$1)||($$<$3)){printf("+ error\n");exit(0);}} 
  |E'-'E {if(($$<$1)||($$<$3)){printf("- error\n");exit(0);}} 
  |E'*'E {if(($$<$1)||($$<$3)){printf("* error\n");exit(0);}}
  |E'/'E {if(($$<$1)||($$<$3)){printf("/ error\n");exit(0);}} 
  |IDD'='E {if(($$<$1)||($$<$3)){printf("= error\n");exit(0);}}
  |IDD
IDD:ID {$$=lookup(yytext);};
%%
#include "lex.yy.c"
#include "ctype.h"
struct types
{
char var[10];
int type;
}TC[10];
int top=0,i;int main()
{
yyparse();
}
yyerror(char *s)
{
 printf("%s\n",s);
}
insert(char *sl,int tp)
{
 strcpy(TC[top].var,sl);
 TC[top].type=tp;
 top++;
}
int lookup(char *cc)
{
 int flag=0;
 for(i=0;i<top;i++)
 {
  if(strcmp(cc,TC[i].var)==0)
    return(TC[i].type);
 }
printf("lookup error");
exit(0);
}

Lex program

%{
#include "y.tab.h"
extern int yylval;
%}
%%
"char"   {yylval=1;return CHAR;}
"int"    {yylval=2;return INT;}
"float"  {yylval=3;return FLOAT;}
[a-z]+   {return ID;}
[\t]     ;
" "      {return SP;}
[\n]     {return 0;}
.        {return yytext[0];}
%%



 OUTPUT

int x,y;float z;z=x+y;
CHECKED

int x;float y;x=y;

= error

0 comments:

Post a Comment