Top Banner
CD LAB PROGRAMS DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING Compiler Design Lab Manual Prepared by Mohan Rao Mamdikar ASST-PROF,CSE LORDS INSTITUTE OF ENGINEERING AND TECHNOLOGY 1
36

26657257 Compiler Design Lab Manual

Oct 27, 2014

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

DEPARTMENT OFCOMPUTER SCIENCE AND ENGINEERING

Compiler Design Lab Manual

Prepared by

Mohan Rao MamdikarASST-PROF,CSE

LORDS INSTITUTE OF ENGINEERING AND TECHNOLOGY(Affiliated to JNTU, Hyd. & Approved by AICTE)

Himayat Sagar, Hyderabad

1

Page 2: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

TABLE OF CONTENTS(As per syllabus)

S.No

TOPIC Week

PageNo.

1System Requirements 3

2Lab Objectives 4

3Design a lexical analyzer for given language .the lexical analyzer should ignore redundant spaces, tabs and new lines.

5

4

Implement the lexical analyzer using JLex, flex or other lexical analyzer generating tools. 8

5Design predictive parser for the given language 11

6Design a LALR bottom up parser for the given language 16

7

Convert the BNF rules into Yacc form and write code to generate abstract syntax tree. 18

8A program to generate machine code 25

9

10

11

12

13

14

15

16

17

18

2

Page 3: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

System Requirements

1. Intel based destktop PC of 166MHz or faster processor with at least 64 MB RAM and 100 MB free disk space.

2. C++ compiler and JDK kit.

Lab Objectives

3

Page 4: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

1. To provide an Understanding of the language translation peculiarities by designing complete translator for mini language.

2. To provide an understanding of the design aspect of operating system.

4

Page 5: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

1)A Program to Design Lexical Analyzer.

#include<string.h>#include<ctype.h>#include<stdio.h>void keyword(char str[10]){if(strcmp("for",str)==0||strcmp("while",str)==0||strcmp("do",str)==0||strcmp("int",str)==0||strcmp("float",str)==0||strcmp("char",str)==0||strcmp("double",str)==0||strcmp("static",str)==0||strcmp("switch",str)==0||strcmp("case",str)==0)

printf("\n%s is a keyword",str);else

printf("\n%s is an identifier",str);}main(){

FILE *f1,*f2,*f3;char c,str[10],st1[10];int num[100],lineno=0,tokenvalue=0,i=0,j=0,k=0;

printf("\nEnter the c program");/*gets(st1);*/f1=fopen("input","w");while((c=getchar())!=EOF)

putc(c,f1);fclose(f1);f1=fopen("input","r");f2=fopen("identifier","w");f3=fopen("specialchar","w");while((c=getc(f1))!=EOF){

if(isdigit(c)){

tokenvalue=c-'0';c=getc(f1);while(isdigit(c)){

tokenvalue*=10+c-'0';c=getc(f1);

}num[i++]=tokenvalue;ungetc(c,f1);

}else if(isalpha(c)){

putc(c,f2);c=getc(f1);

5

Page 6: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

while(isdigit(c)||isalpha(c)||c=='_'||c=='$'){

putc(c,f2);c=getc(f1);

}putc(' ',f2);ungetc(c,f1);

}else if(c==' '||c=='\t')

printf(" ");

else if(c=='\n')lineno++;

elseputc(c,f3);

}fclose(f2);fclose(f3);fclose(f1);printf("\nThe no's in the program are");for(j=0;j<i;j++)

printf("%d",num[j]);printf("\n");f2=fopen("identifier","r");k=0;printf("The keywords and identifiersare:");while((c=getc(f2))!=EOF){

if(c!=' ')str[k++]=c;

else{ str[k]='\0';

keyword(str);k=0;

}}fclose(f2);f3=fopen("specialchar","r");printf("\nSpecial characters are");while((c=getc(f3))!=EOF)

printf("%c",c);printf("\n");fclose(f3);printf("Total no. of lines are:%d",lineno);

}

6

Page 7: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

Output:

Enter the C program a+b*c

Ctrl-D

The no’s in the program are:

The keywords and identifiers are:a is an identifier and terminalb is an identifier and terminalc is an identifier and terminal

Special characters are:+ *

Total no. of lines are: 1

7

Page 8: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

2)Implement the Lexical Analyzer Using Lex Tool.

/* program name is lexp.l */%{ /* program to recognize a c program */ int COMMENT=0;%}identifier [a-zA-Z][a-zA-Z0-9]*

%%

#.* { printf("\n%s is a PREPROCESSOR DIRECTIVE",yytext);}int |float |char |double |while |for |do |if |break |continue |void |switch |case |long |struct |const |typedef |return |else |goto {printf("\n\t%s is a KEYWORD",yytext);}"/*" {COMMENT = 1;} /*{printf("\n\n\t%s is a COMMENT\n",yytext);}*/

"*/" {COMMENT = 0;} /* printf("\n\n\t%s is a COMMENT\n",yytext);}*/{identifier}\( {if(!COMMENT)printf("\n\nFUNCTION\n\t%s",yytext);}

\{ {if(!COMMENT) printf("\n BLOCK BEGINS");}

\} {if(!COMMENT) printf("\n BLOCK ENDS");}

8

Page 9: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

{identifier}(\[[0-9]*\])? {if(!COMMENT) printf("\n %s IDENTIFIER",yytext);}\".*\" {if(!COMMENT) printf("\n\t%s is a STRING",yytext);}

[0-9]+ {if(!COMMENT) printf("\n\t%s is a NUMBER",yytext);}

\)(\;)? {if(!COMMENT) printf("\n\t");ECHO;printf("\n");}

\( ECHO;

= {if(!COMMENT)printf("\n\t%s is an ASSIGNMENT OPERATOR",yytext);}

\<= |\>= |\< |== |\> {if(!COMMENT) printf("\n\t%s is a RELATIONAL OPERATOR",yytext);}

%%

int main(int argc,char **argv){ if (argc > 1) { FILE *file; file = fopen(argv[1],"r"); if(!file) { printf("could not open %s \n",argv[1]); exit(0); } yyin = file; } yylex(); printf("\n\n"); return 0;}int yywrap(){ return 0;}

9

Page 10: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

Input:

$vi var.c

#include<stdio.h>main(){ int a,b;}

Output:

$lex lex.l$cc lex.yy.c$./a.out var.c

#include<stdio.h> is a PREPROCESSOR DIRECTIVE

FUNCTION

main ( )

BLOCK BEGINS

int is a KEYWORD

a IDENTIFIER b IDENTIFIER

BLOCK ENDS

10

Page 11: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

3) Implementation of Predictive Parser.

#include<stdio.h>#include<ctype.h>#include<string.h>#include<stdlib.h>#define SIZE 128#define NONE -1#define EOS '\0'#define NUM 257#define KEYWORD 258#define ID 259#define DONE 260#define MAX 999char lexemes[MAX];char buffer[SIZE];int lastchar=-1;int lastentry=0;int tokenval=DONE;int lineno=1;int lookahead;struct entry{ char *lexptr; int token;}symtable[100];struct entry keywords[]={"if",KEYWORD,"else",KEYWORD,"for",KEYWORD,"int",KEYWORD,"float",KEYWORD,"double",KEYWORD,"char",KEYWORD,"struct",KEYWORD,"return",KEYWORD,0,0};void Error_Message(char *m){ fprintf(stderr,"line %d, %s \n",lineno,m); exit(1);}int look_up(char s[ ]){ int k; for(k=lastentry;k>0;k--) if(strcmp(symtable[k].lexptr,s)==0) return k; return 0;}int insert(char s[ ],int tok){ int len;

11

Page 12: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

len=strlen(s); if(lastentry+1>=MAX) Error_Message("Symbpl table is full"); if(lastchar+len+1>=MAX) Error_Message("Lexemes array is full"); lastentry=lastentry+1; symtable[lastentry].token=tok; symtable[lastentry].lexptr=&lexemes[lastchar+1]; lastchar=lastchar+len+1; strcpy(symtable[lastentry].lexptr,s); return lastentry;}/*void Initialize(){ struct entry *ptr; for(ptr=keywords;ptr->token;ptr+1) insert(ptr->lexptr,ptr->token);}*/int lexer(){ int t; int val,i=0; while(1) { t=getchar(); if(t==' '||t=='\t'); else if(t=='\n') lineno=lineno+1; else if(isdigit(t)) { ungetc(t,stdin); scanf("%d",&tokenval); return NUM; } else if(isalpha(t)) { while(isalnum(t)) { buffer[i]=t; t=getchar(); i=i+1; if(i>=SIZE) Error_Message("Compiler error"); } buffer[i]=EOS; if(t!=EOF)

12

Page 13: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

ungetc(t,stdin); val=look_up(buffer); if(val==0) val=insert(buffer,ID); tokenval=val; return symtable[val].token; } else if(t==EOF) return DONE; else { tokenval=NONE; return t; } }}void Match(int t){ if(lookahead==t) lookahead=lexer(); else Error_Message("Syntax error");}void display(int t,int tval){ if(t=='+'||t=='-'||t=='*'||t=='/') printf("\nArithmetic Operator: %c",t); else if(t==NUM) printf("\n Number: %d",tval); else if(t==ID) printf("\n Identifier: %s",symtable[tval].lexptr); else printf("\n Token %d tokenval %d",t,tokenval);}void F(){ //void E(); switch(lookahead) { case '(' : Match('('); E(); Match(')'); break; case NUM : display(NUM,tokenval); Match(NUM); break;

13

Page 14: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

case ID : display(ID,tokenval); Match(ID); break; default : Error_Message("Syntax error"); }}void T(){ int t; F(); while(1) { switch(lookahead) { case '*' : t=lookahead; Match(lookahead); F(); display(t,NONE); continue; case '/' : t=lookahead; Match(lookahead); display(t,NONE); continue; default : return; } }}void E(){ int t; T(); while(1) { switch(lookahead) { case '+' : t=lookahead; Match(lookahead); T(); display(t,NONE); continue; case '-' : t=lookahead; Match(lookahead); T(); display(t,NONE); continue; default : return;

14

Page 15: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

} }}void parser(){ lookahead=lexer(); while(lookahead!=DONE) { E(); Match(';'); }}main(){ char ans[10]; printf("\n Program for recursive decent parsing "); printf("\n Enter the expression "); printf("And place ; at the end\n"); printf("Press Ctrl-Z to terminate\n"); parser();}

Output:

Program for recursive decent parsingEnter the expression And place ; at the endPress Ctrl-Z to terminatea+b*c;Identifier: aIdentifier: bIdentifier: cArithmetic Operator: *Arithmetic Operator: +2*3;Number: 2Number: 3Arithmetic Operator: *+3;line 5,Syntax errorCtrl-Z

15

Page 16: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

4) Design LALR Bottom up Parser .

<parser.l>

%{#include<stdio.h>#include "y.tab.h"

%}%%[0-9]+ {yylval.dval=atof(yytext);

return DIGIT;}

\n|. return yytext[0];%%

<parser.y>

%{/*This YACC specification file generates the LALR parser for the program

considered in experiment 4.*/ #include<stdio.h>%}%union{

double dval;}

%token <dval> DIGIT%type <dval> expr%type <dval> term%type <dval> factor

%%

line: expr '\n' {printf("%g\n",$1);}

;expr: expr '+' term {$$=$1 + $3 ;}

| term ;

term: term '*' factor {$$=$1 * $3 ;} | factor ;

factor: '(' expr ')' {$$=$2 ;}

16

Page 17: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

| DIGIT ;

%%int main(){

yyparse();}

yyerror(char *s){

printf("%s",s);}

Output:

$lex parser.l$yacc –d parser.y$cc lex.yy.c y.tab.c –ll –lm$./a.out2+35.0000

17

Page 18: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

5) Convert The BNF rules into Yacc form and write code to generate abstract syntax tree.

<int.l>%{ #include"y.tab.h" #include<stdio.h> #include<string.h> int LineNo=1;%}

identifier [a-zA-Z][_a-zA-Z0-9]*number [0-9]+|([0-9]*\.[0-9]+)%%

main\(\) return MAIN;

if return IF;else return ELSE;while return WHILE;

int |char |float return TYPE;

{identifier} {strcpy(yylval.var,yytext); return VAR;}

{number} {strcpy(yylval.var,yytext); return NUM;}

\< |\> |\>= |\<= | == {strcpy(yylval.var,yytext); return RELOP;}

[ \t] ;\n LineNo++;

. return yytext[0];

%%

18

Page 19: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

<int.y>

%{#include<string.h>#include<stdio.h>struct quad{ char op[5]; char arg1[10]; char arg2[10]; char result[10];}QUAD[30];struct stack{ int items[100]; int top;}stk;

int Index=0,tIndex=0,StNo,Ind,tInd;extern int LineNo;%}

%union{ char var[10];}%token <var> NUM VAR RELOP%token MAIN IF ELSE WHILE TYPE

%type <var> EXPR ASSIGNMENT CONDITION IFST ELSEST WHILELOOP%left '-' '+'%left '*' '/'

%%

PROGRAM : MAIN BLOCK;

BLOCK: '{' CODE '}';

CODE: BLOCK | STATEMENT CODE | STATEMENT;STATEMENT: DESCT ';' | ASSIGNMENT ';'

19

Page 20: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

| CONDST | WHILEST;

DESCT: TYPE VARLIST;

VARLIST: VAR ',' VARLIST | VAR ;

ASSIGNMENT: VAR '=' EXPR{ strcpy(QUAD[Index].op,"="); strcpy(QUAD[Index].arg1,$3); strcpy(QUAD[Index].arg2,""); strcpy(QUAD[Index].result,$1); strcpy($$,QUAD[Index++].result); };

EXPR: EXPR '+' EXPR {AddQuadruple("+",$1,$3,$$);} | EXPR '-' EXPR {AddQuadruple("-",$1,$3,$$);} | EXPR '*' EXPR {AddQuadruple("*",$1,$3,$$);} | EXPR '/' EXPR {AddQuadruple("/",$1,$3,$$);} | '-' EXPR {AddQuadruple("UMIN",$2,"",$$);} | '(' EXPR ')' {strcpy($$,$2);} | VAR | NUM;

CONDST: IFST{Ind=pop();sprintf(QUAD[Ind].result,"%d",Index);Ind=pop();sprintf(QUAD[Ind].result,"%d",Index);}| IFST ELSEST;

IFST: IF '(' CONDITION ')' {strcpy(QUAD[Index].op,"==");strcpy(QUAD[Index].arg1,$3);strcpy(QUAD[Index].arg2,"FALSE");strcpy(QUAD[Index].result,"-1");push(Index);Index++;

20

Page 21: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

}

BLOCK {strcpy(QUAD[Index].op,"GOTO");strcpy(QUAD[Index].arg1,"");strcpy(QUAD[Index].arg2,"");strcpy(QUAD[Index].result,"-1");push(Index);Index++;};

ELSEST: ELSE{tInd=pop();Ind=pop();push(tInd);sprintf(QUAD[Ind].result,"%d",Index);}BLOCK{Ind=pop();sprintf(QUAD[Ind].result,"%d",Index);};

CONDITION: VAR RELOP VAR {AddQuadruple($2,$1,$3,$$); StNo=Index-1; } | VAR | NUM ;WHILEST: WHILELOOP{ Ind=pop(); sprintf(QUAD[Ind].result,"%d",StNo); Ind=pop(); sprintf(QUAD[Ind].result,"%d",Index); };WHILELOOP: WHILE '(' CONDITION ')' { strcpy(QUAD[Index].op,"=="); strcpy(QUAD[Index].arg1,$3); strcpy(QUAD[Index].arg2,"FALSE"); strcpy(QUAD[Index].result,"-1"); push(Index); Index++; }BLOCK {

21

Page 22: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

strcpy(QUAD[Index].op,"GOTO"); strcpy(QUAD[Index].arg1,""); strcpy(QUAD[Index].arg2,""); strcpy(QUAD[Index].result,"-1"); push(Index); Index++; } ;%%extern FILE *yyin;int main(int argc,char *argv[]){ FILE *fp; int i; if(argc>1) { fp=fopen(argv[1],"r"); if(!fp) { printf("\n File not found"); exit(0); } yyin=fp; } yyparse(); printf("\n\n\t\t ----------------------------""\n\t\t Pos Operator Arg1 Arg2 Result" "\n\t\t --------------------"); for(i=0;i<Index;i++) { printf("\n\t\t %d\t %s\t %s\t %s\t %s",i,QUAD[i].op,QUAD[i].arg1,QUAD[i].arg2,QUAD[i].result); } printf("\n\t\t -----------------------"); printf("\n\n"); return 0;}void push(int data){ stk.top++; if(stk.top==100) { printf("\n Stack overflow\n"); exit(0); } stk.items[stk.top]=data;}

22

Page 23: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

int pop(){ int data; if(stk.top==-1) { printf("\n Stack underflow\n"); exit(0); } data=stk.items[stk.top--]; return data;}void AddQuadruple(char op[5],char arg1[10],char arg2[10],char result[10]){ strcpy(QUAD[Index].op,op); strcpy(QUAD[Index].arg1,arg1); strcpy(QUAD[Index].arg2,arg2); sprintf(QUAD[Index].result,"t%d",tIndex++); strcpy(result,QUAD[Index++].result);}yyerror(){ printf("\n Error on line no:%d",LineNo);}

Input:

$vi test.cmain(){ int a,b,c; if(a<b) { a=a+b; } while(a<b) { a=a+b; } if(a<=b) { c=a-b; } else { c=a+b;

23

Page 24: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

}}Output:

$lex int.l$yacc –d int.y$gcc lex.yy.c y.tab.c –ll –lm$./a.out test.c

Pos Operator Arg1 Arg2 Result

0 < a b to

1 == to FALSE 5

2 + a b t1

3 = t1 a

4 GOTO 5

5 < a b t2

6 == t2 FALSE 10

7 + a b t3

8 = t3 a

9 GOTO 5

10 <= a b t4

11 == t4 FALSE 15

12 - a b t5

13 = t5 c

14 GOTO 17

15 + a b t3

16 = t6 c

___________________________________________________

24

Page 25: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

6) A Program to Generate Machine Code.

#include<stdio.h>#include<stdlib.h>#include<string.h>int label[20];int no=0;int main(){ FILE *fp1,*fp2; char fname[10],op[10],ch; char operand1[8],operand2[8],result[8]; int i=0,j=0; printf("\n Enter filename of the intermediate code"); scanf("%s",&fname); fp1=fopen(fname,"r"); fp2=fopen("target.txt","w"); if(fp1==NULL || fp2==NULL) { printf("\n Error opening the file"); exit(0); } while(!feof(fp1)) { fprintf(fp2,"\n"); fscanf(fp1,"%s",op); i++; if(check_label(i)) fprintf(fp2,"\nlabel#%d",i); if(strcmp(op,"print")==0) { fscanf(fp1,"%s",result); fprintf(fp2,"\n\t OUT %s",result); } if(strcmp(op,"goto")==0) { fscanf(fp1,"%s %s",operand1,operand2); fprintf(fp2,"\n\t JMP %s,label#%s",operand1,operand2); label[no++]=atoi(operand2); } if(strcmp(op,"[]=")==0) { fscanf(fp1,"%s %s %s",operand1,operand2,result); fprintf(fp2,"\n\t STORE %s[%s],%s",operand1,operand2,result); } if(strcmp(op,"uminus")==0)

25

Page 26: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

{ fscanf(fp1,"%s %s",operand1,result); fprintf(fp2,"\n\t LOAD -%s,R1",operand1); fprintf(fp2,"\n\t STORE R1,%s",result); } switch(op[0]) { case '*': fscanf(fp1,"%s %s %s",operand1,operand2,result); fprintf(fp2,"\n \t LOAD",operand1); fprintf(fp2,"\n \t LOAD %s,R1",operand2); fprintf(fp2,"\n \t MUL R1,R0"); fprintf(fp2,"\n \t STORE R0,%s",result); break; case '+': fscanf(fp1,"%s %s %s",operand1,operand2,result); fprintf(fp2,"\n \t LOAD %s,R0",operand1); fprintf(fp2,"\n \t LOAD %s,R1",operand2); fprintf(fp2,"\n \t ADD R1,R0"); fprintf(fp2,"\n \t STORE R0,%s",result); break; case '-': fscanf(fp1,"%s %s %s",operand1,operand2,result); fprintf(fp2,"\n \t LOAD %s,R0",operand1); fprintf(fp2,"\n \t LOAD %s,R1",operand2); fprintf(fp2,"\n \t SUB R1,R0"); fprintf(fp2,"\n \t STORE R0,%s",result); break; case '/': fscanf(fp1,"%s %s %s",operand1,operand2,result); fprintf(fp2,"\n \t LOAD %s,R0",operand1); fprintf(fp2,"\n \t LOAD %s,R1",operand2); fprintf(fp2,"\n \t DIV R1,R0"); fprintf(fp2,"\n \t STORE R0,%s",result); break; case '%': fscanf(fp1,"%s %s %s",operand1,operand2,result); fprintf(fp2,"\n \t LOAD %s,R0",operand1); fprintf(fp2,"\n \t LOAD %s,R1",operand2); fprintf(fp2,"\n \t DIV R1,R0"); fprintf(fp2,"\n \t STORE R0,%s",result); break; case '=': fscanf(fp1,"%s %s",operand1,result); fprintf(fp2,"\n\t STORE %s %s",operand1,result); break; case '>': j++; fscanf(fp1,"%s %s %s",operand1,operand2,result); fprintf(fp2,"\n \t LOAD %s,R0",operand1); fprintf(fp2,"\n\t JGT %s,label#%s",operand2,result); label[no++]=atoi(result); break;

26

Page 27: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

case '<': fscanf(fp1,"%s %s %s",operand1,operand2,result); fprintf(fp2,"\n \t LOAD %s,R0",operand1); fprintf(fp2,"\n\t JLT %s,label#%d",operand2,result); label[no++]=atoi(result); break; } } fclose(fp2); fclose(fp1); fp2=fopen("target.txt","r"); if(fp2==NULL) { printf("Error opening the file\n"); exit(0); } do { ch=fgetc(fp2); printf("%c",ch); }while(ch!=EOF); fclose(fp1); return 0;}int check_label(int k){ int i; for(i=0;i<no;i++) { if(k==label[i]) return 1; } return 0;}

Input:

$vi int.txt=t1 2[]=a 0 1[]=a 1 2[]=a 2 3*t1 6 t2+a[2] t2 t3

27

Page 28: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

-a[2] t1 t2/t3 t2 t2uminus t2 t2print t2goto t2 t3=t3 99uminus 25 t2*t2 t3 t3uminus t1 t1+t1 t3 t4print t4

Output:

Enter filename of the intermediate code: int.txt

STORE t1,2STORE a[0],1STORE a[1],2STORE a[2],3

LOAD t1,R0LOAD 6,R1ADD R1,R0STORE R0,t3

LOAD a[2],R0LOAD t2,R1ADD R1,R0STORE R0,t3

LOAD a[t2],R0LOAD t1,R1SUB R1,R0STORE R0,t2

LOAD t3,R0LOAD t2,R1DIV R1,R0STORE R0,t2

LOAD t2,R1STORE R1,t2LOAD t2,R0JGT 5,label#11

28

Page 29: 26657257 Compiler Design Lab Manual

CD LAB PROGRAMS

Label#11: OUT t2 JMP t2,label#13Label#13: STORE t3,99 LOAD 25,R1 STORE R1,t2 LOAD t2,R0 LOAD t3,R1 MUL R1,R0 STORE R0,t3 LOAD t1,R1 STORE R1,t1 LOAD t1,R0 LOAD t3,R1 ADD R1,R0 STORE R0,t4 OUT t4

29