About

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

Saturday, June 8, 2013

S6 CSE COMPILER LAB : PARSER FOR 'FOR' LOOP

/*  PARSER FOR 'FOR' LOOP  */

Yacc program

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

Lex program

%{
#include "y.tab.h"
%}
%%
"for"      {return FOR;}
"&&"      {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

for(i=0;i<10;i++){a=b+c;}
ACCEPTED

for(i=0;j=2;i++){i++;}
ERROR

for(i=0;i<10;i++){j++;}
ACCEPT ED


0 comments:

Post a Comment