Cs431 Compiler Design Lab
Cs431 Compiler Design Lab
LAB MANUEL
We intend to facilitate our students to assimilate the latest technological know-how and to
imbibe discipline, culture and spiritually, and to mould them in to technological giants,
dedicated research scientists and intellectual leaders of the country who can spread the
beams of light and happiness among the poor and the underprivileged.
ABOUT DEPARTMENT
Established in: 2002
1|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
DEPARTMENT VISION
Producing Highly Competent, Innovative and Ethical Computer Science and Engineering
Professionals to facilitate continuous technological advancement.
DEPARTMENT MISSION
2|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
3|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
PSO3: Ability to inculcate the Knowledge for developing Codes and integrating
hardware/software products in the domains of Big Data Analytics, Web Applications
and Mobile Apps to create innovative career path and for the socially relevant issues.
COURSE OUTCOME
CO’S PO1 PO2 PO3 PO4 PO5 PO6 PO7 PO8 PO9 PO10 PO11 PO12
C431.1 3 2 3 2 3 - - 3 3 3 - 3
C431.2 3 3 3 - 3 - - 3 3 3 - 3
C431.3 3 3 3 3 2 - - 3 3 3 - 3
C431.4 3 - 2 - 3 - - 3 3 3 - 3
C431.5 3 2 2 - 3 - - 3 3 3 - 3
C431.6 3 2 2 - 3 - - 3 3 3 - 3
4|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
1. You should come prepared for your lab session properly to utilize the
maximum time of lab session
3. You may seek assistance in doing the lab experiments from the available lab
Instructor.
7. Maintain silence, order and discipline inside the lab. Don’t use cell phones
inside the laboratory
5|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
3. Make sure you understand what kind of report is to be prepared and due
submission of record is next lab class.
LABORATORY POLICIES
1. Food, beverages & mobile phones are not allowed in the laboratory at any
time.
6|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
SYLLABUS
7|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
INDEX
EXP PAGE
EXPERIMENT NAME
NO NO
1 IMPLEMENTATION OF LEXICAL ANALYZER USING C 9
8|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
EXPERIMENT – 1
IMPLEMENTATION OF LEXICAL ANALYZER USING C
AIM
Design and implement a lexical analyzer for given language using C and the lexical
analyzer should ignore redundant spaces, tabs and new lines.
PROGRAM /PROCEDURE
#include<stdio.h>
#include<string.h>
void main()
FILE *f1;
char c;
char str[20];
int i=0,num,linecount=1f;
f1=fopen("input.txt","r");
num=c-48;
c=getc(f1);
while(isdigit(c))
num=num*10+(c-48);
9|Page
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
c=getc(f1);
ungetc(c,f1);
str[i++]=c;
c=getc(f1);
while(isdigit(c)||isalpha(c)||c=='_'||c=='$')
str[i++]=c;
c=getc(f1);
str[i++]='\0';
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("%s is a keyword\n",str);
else
printf("%s is a identifier\n",str);
ungetc(c,f1);
10 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
i=0;
{}
linecount++;
fclose(f1);
getch();
OUTPUT:
int is a keyword
main is an identifier
int is a keyword
a is an identifier
char is a keyword
ch is an identifier
11 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
float is a keyword
f is an identifier
Viva questions
1. The process of forming tokens from an input stream of characters is called
2. Which grammar defines Lexical Syntax?
3. Two Important lexical categories are
4. When expression sum=3+2 is tokenized then what is the token category of 3?
5. What is the output of a lexical analyzer?
12 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
EXPERIMENT 2
AIM
PROGRAM/ PROCEDURE :
%{
#include<stdio.h>
%}
delim [\t]
ws {delim}+
letter [A-Za-z]
digit [0-9]
id {letter}({letter}|{digit})*
num {digit}+(\.{digit}+)?(E[+|-]?{digit}+)?
%%
ws {printf("no action");}
(.)* {printf("Unacceptable\n");}
%%
int yywrap()
return 0;
int main()
yylex();
OUTPUT
lexlexicalfile.l
cc lex.yy.c -ll
if
if is a keyword
14 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
num
num is a identifier
254
It is a number
<>
Viva questions
1. The process of forming tokens from an input stream of characters is called
2. Which grammar defines Lexical Syntax?
3. Two Important lexical categories are
4. When expression sum=3+2 is tokenized then what is the token category of 3?
5. What is the output of a lexical analyzer?
EXPERIMENT – 3
PROGRAM TO RECOGNIZE A VALID ARITHMETIC EXPRESSION
AIM
15 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
PROGRAM/PROCEDURE
Lex Program:
%{
#include "y.tab.h"
%}
%%
\n { return 0; }
. { return yytext[0]; }
%%
Yacc Program:
%{
#include<stdio.h>
#include<stdlib.h>
%}
%token NUMBER ID
%left '+''-''*''/'
%%
16 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
exp : exp'+'exp
| exp'-'exp
| exp'*'exp
| exp'/'exp
| '('exp')'
| NUMBER
| ID ;
%%
yyparse();
printf("Valid Expression!\n");
return 0;
int yyerror() {
printf("Invalid Expression!\n");
exit(1);
int yywrap() {
return 1;
17 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
Execution:
lex exp3.l
yacc -d exp3.y
Output:
Valid Expression!
Invalid Expression!
Viva questions
EXPERIMENT -4
PROGRAM TO RECOGNIZE A VALID VARIABLE WHICH STARTS
LETTERS OR DIGITS
18 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
AIM
Program to recognize a valid variable, which starts with a letter, followed by any
number of letters or digits.
PROGRAM/ PROCEDURE:
Lex Program:
%{
#include "y.tab.h"
%}
%%
\n { return 0; }
. { return yytext[0]; }
%%
Yacc Program:
%{
#include <stdio.h>
#include <stdlib.h>
%}
%%
var : ALPHA
| var ALPHA
| var DIGIT ;
19 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
%%
yyparse();
printf("Valid Variable!\n");
return 0;
int yyerror() {
printf("Invalid Variable!\n");
exit(1);
int yywrap() {
return 1;
Execution:
lex exp4.l
yacc -d exp4.y
Output:
20 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
Valid Variable!
Invalid Variable!
Viva Questions
EXPERIMENT -5
IMPLEMENTATION OF CALCULATOR USING LEX AND YACC
AIM
21 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
.
PROGRAM/PROCEDURE:
Lex Program:
%{
#include "y.tab.h"
#include<stdio.h>
%}
%%
. {return yytext[0];}
[\t]+ ;
\n {return 0;}
%%
Yacc Program:
%{
#include<stdio.h>
%}
%token NUMBER
%%
22 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
%%
int main()
yyparse();
return 0;
yyerror(char *s)
printf("error:%s",s);
Execution:
23 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
lex exp5.l
yacc -d exp5.y
Output:
Answer=7
Viva Questions
EXPERIMENT – 6
CONVERSION OF NFA TO DFA
AIM
24 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
PROGRAM/PROCEDURE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char NFA_FILE[MAX_LEN];
char buffer[MAX_LEN];
int zz = 0;
struct DFA {
char *states;
int count;
} dfa;
int last_index = 0;
FILE *fp;
int symbols;
25 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
int i;
ar[i] = 0;
int i, j;
j = ((int)(S[i]) - 65);
ar[j]++;
26 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
int j, k = 0;
if (ar[j] != 0)
S[k] = '\0';
int i;
if (ar[i] == 1)
return i;
27 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
return (100);
int i;
if (dfa[i].count == 0)
return 1;
return -1;
char *closure_table[],
char *DFA_TABLE[][symbols]) {
int i;
reset(closure_ar, states);
closure_ar[i] = 2;
28 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
if (strcmp(&NFA_TABLE[i][symbols], "-") != 0) {
strcpy(buffer, &NFA_TABLE[i][symbols]);
check(closure_ar, buffer);
while (z != 100)
if (strcmp(&NFA_TABLE[z][symbols], "-") != 0) {
strcpy(buffer, &NFA_TABLE[z][symbols]);
check(closure_ar, buffer);
closure_ar[z]++;
z = closure(closure_ar, states);
29 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
strcpy(&closure_table[i], buffer);
printf("%s\n", &closure_table[i]);
int i;
if (strcmp(&dfa[i].states, S) == 0)
return 0;
strcpy(&dfa[last_index++].states, S);
30 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
// to zero
dfa[last_index - 1].count = 0;
return 1;
int i, j, k, g;
int arr[st];
int sz;
reset(arr, st);
char *buff;
j = ((int)(S[i] - 65));
strcpy(temp, &NFT[j][M]);
if (strcmp(temp, "-") != 0) {
sz = strlen(temp);
31 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
g = 0;
k = ((int)(temp[g] - 65));
strcpy(temp2, &clsr_t[k]);
check(arr, temp2);
g++;
if (temp[0] != '\0') {
strcpy(TB, temp);
} else
strcpy(TB, "-");
char *DFA_TABLE[][symbols]) {
int i, j;
printf("\n\n********************************************************\n\n");
32 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
printf("\n");
printf("\n\n");
printf("STATES\t");
printf("|%d\t", i);
printf("\n");
printf("--------+-----------------------\n");
printf("\n");
33 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
// Driver Code
int main() {
int i, j, states;
char T_buf[MAX_LEN];
states = 6, symbols = 2;
printf("\n");
printf("eps");
printf("\n\n");
34 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
char *DFA_TABLE[MAX_LEN][symbols];
strcpy(&NFA_TABLE[0][0], "FC");
strcpy(&NFA_TABLE[0][1], "-");
strcpy(&NFA_TABLE[0][2], "BF");
strcpy(&NFA_TABLE[1][0], "-");
strcpy(&NFA_TABLE[1][1], "C");
strcpy(&NFA_TABLE[1][2], "-");
strcpy(&NFA_TABLE[2][0], "-");
strcpy(&NFA_TABLE[2][1], "-");
strcpy(&NFA_TABLE[2][2], "D");
strcpy(&NFA_TABLE[3][0], "E");
strcpy(&NFA_TABLE[3][1], "A");
strcpy(&NFA_TABLE[3][2], "-");
strcpy(&NFA_TABLE[4][0], "A");
strcpy(&NFA_TABLE[4][1], "-");
strcpy(&NFA_TABLE[4][2], "BF");
strcpy(&NFA_TABLE[5][0], "-");
strcpy(&NFA_TABLE[5][1], "-");
strcpy(&NFA_TABLE[5][2], "-");
printf("STATES\t");
printf("|%d\t", i);
35 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
printf("eps\n");
printf("--------+------------------------------------\n");
printf("\n");
int closure_ar[states];
char *closure_table[states];
strcpy(&dfa_states[last_index++].states, "-");
dfa_states[last_index - 1].count = 1;
strcpy(buffer, &closure_table[0]);
strcpy(&dfa_states[last_index++].states, buffer);
int Sm = 1, ind = 1;
36 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
int start_index = 1;
dfa_states[start_index].count = 1;
Sm = 0;
strcpy(&DFA_TABLE[zz][i], T_buf);
Sm = Sm + new_states(dfa_states, T_buf);
ind = indexing(dfa_states);
if (ind != -1)
strcpy(buffer, &dfa_states[++start_index].states);
zz++;
37 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
return 0;
Output:
Test case 1:
STATES OF NFA : A, B, C, D, E, F,
STATES |0 |1 eps
--------+------------------------------------
A |FC |- |BF
B |- |C |-
C |- |- |D
D |E |A |-
E |A |- |BF
F |- |- |-
38 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
e-Closure (B) : BC
e-Closure (C) : C
e-Closure (D) : D
********************************************************
STATES |0 |1
--------+-----------------------
39 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
ABCF |ABCF |C
C |- |-
Test case 2:
Input : 6
2
FC - BF
-C-
--D
EA-
A - BF
---
STATES OF NFA : A, B, C, D, E, F,
STATES |0 |1 eps
--------+------------------------------------
A |FC |- |BF
B |- |C |-
C |- |- |D
D |E |A |-
E |A |- |BF
F |- |- |-
e-Closure (B) : B
e-Closure (C) : CD
e-Closure (D) : D
40 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
e-Closure (F) : F
********************************************************
STATES |0 |1
--------+-----------------------
ABF |CDF |CD
CDF |BEF |ABF
CD |BEF |ABF
BEF |ABF |CD
Test case 3:
Input :
9
2
- - BH
- - CE
D--
--G
-F-
--G
- - BH
I--
-- -
STATES OF NFA : A, B, C, D, E, F, G, H, I,
41 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
STATES |0 |1 eps
--------+------------------------------------
A |- |- |BH
B |- |- |CE
C |D |- |-
D |- |- |G
E |- |F |-
F |- |- |G
G |- |- |BH
H |I |- |-
I |- |- |-
e-Closure (C) : C
e-Closure (E) : E
e-Closure (H) : H
e-Closure (I) : I
********************************************************
STATES |0 |1
--------+-----------------------
ABCEH |BCDEGHI |BCEFGH
BCDEGHI |BCDEGHI |BCEFGH
BCEFGH |BCDEGHI |BCEFGH
42 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
Viva questions
EXPERIMENT NO 7
DFA MINIMIZATION
AIM
43 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
PROGRAM/PROCEDURE:
#include <stdio.h>
#include <string.h>
#define STATES 99
#define SYMBOLS 20
int DFAtab[STATES][SYMBOLS];
int OptDFA[STATES][SYMBOLS];
char NEW_finals[STATES+1];
/*
*/
void print_dfa_table(
44 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
char *finals)
int i, j;
printf(" | ");
printf("\n-----+--");
printf("\n");
printf("\n");
/*
45 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
*/
void load_DFA_table()
DFA_finals = "EF";
N_DFA_states = 6;
N_symbols = 2;
/*
*/
int i, ch;
46 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
*nextstates++ = dfa[cur_states[i]-'A'][symbol];
*nextstates = '\0';
/*
*/
int i;
/*
Return value:
*/
47 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
while (*s) {
s++;
int i;
state_flags[i] = '\0';
48 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
if (i=is_one_nextstate(state_flags))
else {
return (*pn)++;
/*
*/
int i, j;
strcpy(statename[0], finals);
return 1;
49 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
if (i == *finals-'A') {
finals++;
statename[0][j] = '\0';
return 2;
/*
*/
int i, j;
char nextstate[STATES+1];
50 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
return n2;
/*
*/
int n=strlen(s);
*(s+n) = ch;
*(s+n+1) = '\0';
int i, j;
char temp[STATES+1];
51 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
strcpy(temp, stnt[i]);
strcpy(stnt[i], stnt[j]);
strcpy(stnt[j], temp);
/*
Algorithm:
*/
52 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
chr_append(newstates[vec[i]-'0'], old[i]);
if (newstates[i][0]) {
if (!flag) { /* stnt[i1] = s1 */
strcpy(stnt[i1], newstates[i]);
strcpy(stnt[n2++], newstates[i]);
/*
*/
53 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
int i, j, k;
return n;
int i;
printf("\n");
54 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
/*
*/
int optimize_DFA(
char nextstate[STATES+1];
while (1) {
print_equiv_classes(stnt, n);
if (n != n2)
55 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
/*
*/
int i;
return 1;
/*
*/
void get_NEW_finals(
56 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
int i;
*newfinals++ = '\0';
void main()
load_DFA_table();
EXPERIMENT NO 8
OPERATOR PRECEDENCE PARSER
AIM
57 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
PROGRAM/PROCEDURE:
#include<stdio.h>
int main(void)
char stack[20],ip[20],opt[10][10][1],ter[10];
int i,j,k,n,top=0,col,row;
for(i=0;i<10;i++)
stack[i]=NULL;
ip[i]=NULL;
for(j=0;j<10;j++)
opt[i][j][1]=NULL;
scanf("%d",&n);
scanf("%s",&ter);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
58 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
scanf("%s",opt[i][j]);
for(i=0;i<n;i++)
printf("\t%c",ter[i]);
printf("\n");
for(i=0;i<n;i++){printf("\n%c",ter[i]);
for(j=0;j<n;j++){printf("\t%c",opt[i][j][0]);}}
stack[top]='$';
scanf("%s",ip);
i=0;
printf("\nSTACK\t\t\tINPUT STRING\t\t\tACTION\n");
printf("\n%s\t\t\t%s\t\t\t",stack,ip);
while(i<=strlen(ip))
for(k=0;k<n;k++)
if(stack[top]==ter[k])
col=k;
if(ip[i]==ter[k])
59 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
row=k;
if((stack[top]=='$')&&(ip[i]=='$')){
printf("String is accepted\n");
break;}
{ stack[++top]=opt[col][row][0];
stack[++top]=ip[i];
printf("Shift %c",ip[i]);
i++;
else{
if(opt[col][row][0]=='>')
while(stack[top]!='<'){--top;}
top=top-1;
printf("Reduce");
else
break;
printf("\n");
60 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
for(k=0;k<=top;k++)
printf("%c",stack[k]);
printf("\t\t\t");
for(k=i;k<strlen(ip);k++){
printf("%c",ip[k]);
printf("\t\t\t");
Output:
61 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
$ i*i Shift i
$<i *i Reduce
$ *i Shift *
$<* i Shift i
$<*<i
String is not accepted
Viva questions
1. What is operatoe precedence parser
2. Which are the three operator precedence relation
3. What is precedence function
4. What is the complexity of operator precedence parser
EXPERIMENT NO 9
To write an assembly language program to find square and square root of a number using
8051
PROGRAM/PROCEDURE
62 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
a) FIRST
#include<stdio.h>
#include<ctype.h>
void FIRST(char[],char );
void result(char[],char);
intnop;
char prod[10][10];
void main()
int i;
char choice;
char c;
char res1[20];
clrscr();
scanf(" %d",&nop);
for(i=0;i<nop;i++)
scanf(" %s",prod[i]);
do
63 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
scanf(" %c",&c);
memset(res1,’0’,sizeof(res));
FIRST(res1,c);
for(i=0;res1[i]!='\0';i++)
printf(" %c ",res1[i]);
printf("}\n");
scanf(" %c",&choice);
while(choice=='y'||choice =='Y');
inti,j,k;
char subres[5];
int eps;
subres[0]='\0';
res[0]='\0';
memset(res,’0’,sizeof(res));
memset(subres,’0’,sizeof(res));
if(!(isupper(c)))
64 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
result(res,c);
return ;
for(i=0;i<nop;i++)
if(prod[i][0]==c)
if(prod[i][2]=='$')
result(res,'$');
else
j=2;
while(prod[i][j]!='\0')
eps=0;
FIRST(subres,prod[i][j]);
for(k=0;subres[k]!='\0';k++)
result(res,subres[k]);
for(k=0;subres[k]!='\0';k++)
if(subres[k]=='$')
eps=1;
break;
65 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
if(!eps)
break;
j++;
return ;
int k;
for(k=0 ;res[k]!='\0';k++)
if(res[k]==val)
return;
res[k]=val;
res[k+1]='\0';
Output:
66 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
FIRST(X)= { + $ }
FIRST(F)= { ( i }
FIRST(Y)= { * $ }
FIRST(E)= { ( i }
FIRST(T)= { ( i }
b) FOLLOW
#include<stdio.h>
67 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
#include<string.h>
intnop,m=0,p,i=0,j=0;
char prod[10][10],res[10];
void result(char);
void main()
int i;
int choice;
charc,ch;
scanf("%d", &nop);
for(i=0;i<nop;i++)
scanf(" %s",prod[i]);
do
m=0;
memset(res,’0’,sizeof(res));
scanf(" %c",&c);
68 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
FOLLOW(c);
printf("FOLLOW(%c) = { ",c);
for(i=0;i<m;i++)
printf("%c ",res[i]);
printf(" }\n");
scanf("%d%c",&choice,&ch);
while(choice==1);
void FOLLOW(char c)
if(prod[0][0]==c)
result('$');
for(i=0;i<nop;i++)
for(j=2;j<strlen(prod[i]);j++)
if(prod[i][j]==c)
if(prod[i][j+1]!='\0')
first(prod[i][j+1]);
if(prod[i][j+1]=='\0'&&c!=prod[i][0])
FOLLOW(prod[i][0]);
69 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
void first(char c)
int k;
if(!(isupper(c)))
result(c);
for(k=0;k<nop;k++)
{if(prod[k][0]==c)
if(prod[k][2]=='$')
FOLLOW(prod[i][0]);
else if(islower(prod[k][2]))
result(prod[k][2]);
else
first(prod[k][2]);
void result(char c)
int i;
for( i=0;i<=m;i++)
if(res[i]==c)
70 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
return;
res[m++]=c;
Output:
FOLLOW(X) = { $ ) }
Viva questions
71 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
EXPERIMENT NO 10
RECURSIVE DESCENT PARSER
AIM
72 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
PROGRAM/PROCEDURE:
#include<stdio.h>
#include<string.h>
char input[10];
int i=0,error=0;
void E();
void T();
voidEprime();
voidTprime();
void F();
void main()
clrscr();
gets(input);
E();
if(strlen(input)==i&&error==0)
printf("\nAccepted..!!!");
else
printf("\nRejected..!!!");
getch();
void E()
T();
73 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
Eprime();
voidEprime()
if(input[i]=='+')
i++;
T();
Eprime();
void T()
F();
Tprime();
voidTprime()
if(input[i]=='*')
i++;
F();
Tprime();
74 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
void F()
if(input[i]=='(')
i++;
E();
if(input[i]==')')
i++;
else if(isalpha(input[i]))
i++;
while(isalnum(input[i])||input[i]=='_')
i++;
else
error=1;
Output
sum+month*interest
Accepted..!!!
75 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
sum+avg*+interest
Rejected..!!!
Viva questions
EXPERIMENT NO 11
SHIFT REDUCE PARSER
AIM:
PROGRAM/PROCEDURE:
76 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
#include<stdio.h>
#include<string.h>
int k=0,z=0,i=0,j=0,c=0;
char a[16],ac[20],stk[15],act[10];
void check();
void main()
fgets(a,16,stdin);
c=strlen(a);
strcpy(act,"SHIFT->");
stk[i]=a[j];
stk[i+1]=a[j+1];
stk[i+2]='\0';
a[j]=' ';
a[j+1]=' ';
printf("\n$%s\t%s$\t%sid",stk,a,act);
77 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
check();
else
stk[i]=a[j];
stk[i+1]='\0';
a[j]=' ';
printf("\n$%s\t%s$\t%ssymbols",stk,a,act);
check();
void check()
strcpy(ac,"REDUCE TO E");
stk[z]='E';
stk[z+1]='\0';
printf("\n$%s\t%s$\t%s",stk,a,ac);
j++;
78 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
stk[z]='E';
stk[z+1]='\0';
stk[z+2]='\0';
printf("\n$%s\t%s$\t%s",stk,a,ac);
i=i-2;
stk[z]='E';
stk[z+1]='\0';
stk[z+1]='\0';
printf("\n$%s\t%s$\t%s",stk,a,ac);
i=i-2;
stk[z]='E';
stk[z+1]='\0';
stk[z+1]='\0';
printf("\n$%s\t%s$\t%s",stk,a,ac);
i=i-2;
79 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
Output
1)
E->E+E
E->E/E
E->E*E
E->E-E
E->id
$ a+b*c$ --
$a +b*c$ shift a
$E +b*c$ E->a
$E *c$ E->E+E
$E* c$ shift *
80 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
$E*c $ shift c
$E*E $ E->c
$E $ E->E*E
$E $ ACCEPT
E->E+E
E->E/E
E->E*E
E->E-E
E->id
$ a+b*+c$ --
$a +b*+c$ shift a
$E +b*+c$ E->a
81 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
$E *+c$ E->E+E
$E*+ c$ shift +
$E*+c $ shift c
$E*+E $ E->c
$E*+E reject
Viva questions
1. What is a shift step
2. What is reduce step
3. Consider the grammar. E → E + n | E × n | n For a sentence n + n × n, the handles
in the right-sentential form of the reduction ar
4. What are the classification of shift reduce parser
82 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
EXPERIMENT NO 12
INTERMEDIATE CODE GENERATION FOR
SIMPLE EXPRESSIONS
AIM
PROGRAM/PROCEDURE:
#include"stdio.h"
#include"conio.h"
#include"string.h"
int i=1,j=0,no=0,tmpch=90;
char str[100],left[15],right[15];
void findopr();
void explore();
void fleft(int);
void fright(int);
struct exp
int pos;
char op;
}k[15];
void main()
clrscr();
83 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
scanf("%s",str);
findopr();
explore();
getch();
void findopr()
for(i=0;str[i]!='\0';i++)
if(str[i]==':')
k[j].pos=i;
k[j++].op=':';
for(i=0;str[i]!='\0';i++)
if(str[i]=='/')
k[j].pos=i;
k[j++].op='/';
for(i=0;str[i]!='\0';i++)
if(str[i]=='*')
k[j].pos=i;
84 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
k[j++].op='*';
for(i=0;str[i]!='\0';i++)
if(str[i]=='+')
k[j].pos=i;
k[j++].op='+';
for(i=0;str[i]!='\0';i++)
if(str[i]=='-')
k[j].pos=i;
k[j++].op='-';
void explore()
i=1;
while(k[i].op!='\0')
fleft(k[i].pos);
fright(k[i].pos);
str[k[i].pos]=tmpch--;
printf("\t%c := %s%c%s\t\t",str[k[i].pos],left,k[i].op,right);
for(j=0;j <strlen(str);j++)
85 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
if(str[j]!='$')
printf("%c",str[j]);
printf("\n");
i++;
fright(-1);
if(no==0)
fleft(strlen(str));
printf("\t%s := %s",right,left);
getch();
exit(0);
printf("\t%s := %c",right,str[k[--i].pos]);
getch();
void fleft(int x)
int w=0,flag=0;
x--;
if(str[x]!='$'&& flag==0)
86 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
left[w++]=str[x];
left[w]='\0';
str[x]='$';
flag=1;
x--;
void fright(int x)
int w=0,flag=0;
x++;
if(str[x]!='$'&& flag==0)
right[w++]=str[x];
right[w]='\0';
str[x]='$';
flag=1;
x++;
87 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
Output:
Viva questions
1. How ICG helps in generating object code
2. What is 3-addres code
3. What are the type of addressing
4. What are the classification of shift reduce parser
5. What are the properties of optimization compiler
88 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
EXPERIMENT NO 13
LOOP UNROLLING
AIM:
PROGRAM/PROCEDURE:
#include<stdio.h>
int main(void)
return 0;
#include<stdio.h>
int main(void)
printf("Hello\n");
printf("Hello\n");
89 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
printf("Hello\n");
printf("Hello\n");
printf("Hello\n");
return 0;
Output:
Hello
Hello
Hello
Hello
Hello
Viva questions
1. What is a loop unrolling
2. What are the benefits of loop unrolling in program
3. What kinds of loops can be unrolled
90 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
EXPERIMENT NO 14
CONSTANT PROPAGATION AND FOLDING
AIM:
PROGRAM/PROCEDURE:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>
void input();
void output();
void constant();
struct expr
char op[2],op1[5],op2[5],res[5];
int flag;
}arr[10];
int n;
void main()
clrscr();
input();
constant();
91 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
output();
getch();
void input()
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",arr[i].op);
scanf("%s",arr[i].op1);
scanf("%s",arr[i].op2);
scanf("%s",arr[i].res);
arr[i].flag=0;
void constant()
int i;
int op1,op2,res;
char op,res1[5];
for(i=0;i<n;i++)
92 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
op1=atoi(arr[i].op1);
op2=atoi(arr[i].op2);
op=arr[i].op[0];
switch(op)
case '+':
res=op1+op2;
break;
case '-':
res=op1-op2;
break;
case '*':
res=op1*op2;
break;
case '/':
res=op1/op2;
break;
case '=':
res=op1;
break;
sprintf(res1,"%d",res);
93 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
arr[i].flag=1; /*eliminate expr and replace any operand below that uses result of this
expr */
change(i,res1);
void output()
int i=0;
for(i=0;i<n;i++)
if(!arr[i].flag)
printf("\n%s %s %s %s",arr[i].op,arr[i].op1,arr[i].op2,arr[i].res);
int i;
for(i=p+1;i<n;i++)
if(strcmp(arr[p].res,arr[i].op1)==0)
strcpy(arr[i].op1,res);
else if(strcmp(arr[p].res,arr[i].op2)==0)
94 | P a g e
COMPILER DESIGN LAB MANUAL
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING, NCERC PAMPADY.
strcpy(arr[i].op2,res);
INPUT:
=3-a
+ a b t1
+ a c t2
+ t1 t2 t3
OUTPUT:
Optimized code is :
+ 3 b t1
+ 3 c t2
+ t1 t2 t3
Viva questions
1. What is a constant folding
2. Why we do folding in programs
95 | P a g e
COMPILER DESIGN LAB MANUAL