About

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

Saturday, June 8, 2013

S6 CSE COMPILER LAB : PARSER FOR IF THEN ELSE STATEMENT


                       /* PARSER FOR IF THEN ELSE STATEMENT  */

Yacc program

%{
#include<stdio.h>
#include<stdlib.h>
%}
%token num alpha LT GT EQ LE GE NE AND OR NL IF ELSE INC DEC
%left '+''-'
%left '*''/'
%right '^'
%right '='
%nonassoc UMINUS
%nonassoc IF
%nonassoc ELSE
%left LT GT EQ LE GE NE
%left AND OR
%%
S:ST NL  {printf("ACCEPTED\n");exit(0);}
ST:IF'('F')''{'ST'}' %prec IF
     |IF'('F')''{'ST'}'ELSE'{'ST'}'
     |E';'ST
     |E';'
F:C LO C
  |C
LO:AND
     |OR
C:E RELOP E
E:alpha'='E
   |E'+'E
   |E'-'E
   |E'*'E
   |E'/'E
   |E'^'E
   |'-'E %prec UMINUS
   |alpha
   |num
   |alpha INC
   |alpha DEC
RELOP:LT
             |GT
             |EQ
             |GE
             |LE
             |NE
             ;
%%
#include"lex.yy.c"
#include<stdio.h>
int main()
{
  yyparse();
  yylex();
  return 0;
}
yyerror(char *s)
{
  printf("Error\n");
}


Lex program

%{
#include "y.tab.h"
%}
%%
"if"     {return IF;}
"else" {return ELSE;}
"&&" {return AND;}
"||"      {return OR;}
"<"     {return LT;}
">"     {return GT;}
"<="               {return LE;}
">="               {return GE;}
"!="                {return NE;}
"=="               {return EQ;}
"++"               {return INC;}
"--"                 {return DEC;}
[a-z]+               {return alpha;}
[0-9]+    {return num;}
[ \t]       ;
[\n]      {return NL;}
.           {return yytext[0];}
%%


 OUTPUT

if(a>b){a;}
ACCEPTED

if(a==b){c=a+b;}else{c=a-b;}
ACCEPT ED

if(a>b){c=a}else{c=b}

ERROR

0 comments:

Post a Comment