CD Lab Manual
CD Lab Manual
Engineeringknowledge:Applytheknowledgeofmathematics,science,engineering
PO1 Fundamentals andanengineeringspecializationtothesolutionofcomplexengineeringproblems.
Problem analysis: Identify, formulate, review research literature, and analyze complex
PO2 engineering problems reaching substantiated conclusions using first principles of mathematics,
natural sciences, and engineering sciences.
Design/development of solutions: Design solutions for complex engineering problems and
PO3 design system components or processes that meet the specified needs with appropriate
consideration for the public health and safety, and the cultural, societal, and environmental
considerations.
Conduct investigations of complex problems: Use research-based knowledge and research
PO4 methods including design of experiments, analysis and interpretation of data, and synthesis of
the information to provide valid conclusions.
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
Modern tool usage: Create, select, and apply appropriate techniques, resources, and modern
PO5 engineering and IT tools including prediction and modeling to complex engineering activities
with an understanding of the limitations.
The engineer and society: Apply reasoning informed by the contextual knowledge to
PO6 assess societal, health, safety, legal and cultural issues and the consequent responsibilities
relevant to the professional engineering practice.
Life-long learning: Recognize the need for, and have the preparation and ability to engage in
PO12 independent and life-long learning in the broadest context of technological change.
PSO1 Problem Solving Skills – Graduate will be able to apply computational techniques and
software principles to solve complex engineering problems pertaining to software
engineering.
PSO2 Professional Skills – Graduate will be able to think critically, communicate
effectively, and collaborate in teams through participation in co and extra-curricular
activities.
Successful Career – Graduates will possess a solid foundation in computer science and
PSO3 engineering that will enable them to grow in their profession and pursue lifelong learning
through post-graduation and professional development.
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
Course Objectives
Course Outcomes
• CO 1: Design and develop interactive and dynamic web applications using HTML, CSS, JavaScript and XML.
• CO 2:Analyze thelex and yacc tools for developing a scanner and a parser.
• CO 3:Design and implement LL and LR parsers.
• CO 4: Apply client-server principles to develop scalable and enterprise web applications
PO1 PO2 PO3 PO4 PO5 PO6 PO7 PO8 PO9 PO10 PO11 PO12 PSO PSO PSO
1 2 3
CO1 2 - - 1 - - - - - - - - - - -
CO2 2 - - 1 - - - - - - - - 1 - -
CO3 2 1 - 1 - - - - - - - - 1 1 -
CO4 2 2 2 1 - - - - - - - - 2 2 1
S. No List of Experiments
1. Write a LEX Program to scan reserved word & Identifiers of C Language
2. Implement Predictive Parsing algorithm
3. Write a C program to generate three address code.
4. Implement SLR(1) Parsing algorithm
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
FILE *fp; FILE *kfp;
char iden[32],num[32];
int scantoken(); int
chkkey(); static char
ch; char n[20]; void
main() { int token=2;
clrscr();
fp=fopen("source.c","r"); if((kfp=fopen("key.txt","r"))==NULL)
{
printf("\n Unable to open keyword file");
exit(0); }
while(!feof(fp))
{ token=scantoken();
if(token>0)
printf("\n%d %c %s",token,ch,n);
else if(token==0)
{
if(chkkey()==1)
printf("\nKeyword: %s",iden); else
printf("\nIdentifier: %s",iden);
} else
if(token==1)
printf("\nNumber: %s",num);
} fclose(fp);
fclose(kfp);
}
int scantoken()
{ int token=2,j; static
int lookahead=0;
if(!lookahead)
{ ch=fgetc(fp);
lookahead=0;
}
while(token==2)
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
{ switch(ch)
{ case
'
':
ch=fgetc(fp
); break;
case
'\n&#
39;:
ch=fgetc(fp
); break;
case
'\t
9;:
ch=fgetc(fp
); break;
case
'/
9;:
ch=fgetc(fp
);
if(ch=='*')
{ while(1)
{
ch=fgetc(fp);
if(ch=='*')
{ ch=fgetc(fp);
if(ch=='/')
break; }
} } break; case
'<':
ch=fgetc(fp);
if(ch=='=')
{ token=3; lookahead=0;
strcpy(n,"less/equal");
} else { token=2;
lookahead=1;
strcpy(n,"less");
} break; case
'>':
ch=fgetc(fp);
if(ch=='=')
{ token=5; lookahead=0;
strcpy(n,"greater/equal");
} else { token=4; lookahead=1;
strcpy(n,"greater")
; } break; case '=':
ch=fgetc(fp);
if(ch=='=')
{ token=7; lookahead=0;
strcpy(n,"equalcomp")
;
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
} else { token=2;
lookahead=1;
strcpy(n,"assign")
;
} break; case
'!':
ch=fgetc(fp);
if(ch=='=')
{ token=9; lookahead=0;
strcpy(n,"notequal");
} else { token=8; lookahead=1; }
break; case '+':
token=10; lookahead=0;
strcpy(n,"plus");
break; case '-':
token=11; lookahead=0;
strcpy(n,"minus");
break; case '*':
token=12; lookahead=0;
strcpy(n,"multiply");
break; case ';':
token=13; lookahead=0;
strcpy(n,"semicolon")
;
break; case
'{':
token=14;
lookahead=0;
strcpy(n,"ope
nbrace");
break; case
'}':
token=15; lookahead=0;
strcpy(n,"closebrace");
break; case '(':
token=16; lookahead=0;
strcpy(n,"Leftparenthesis");
break; case ')':
token=10; lookahead=0;
strcpy(n,"Rightparenthesis");
break; case 'ef':
token=-3;
strcpy(n,"EOF");
break; default:
if((ch>='a')&&(ch<='z'))
{ iden[0]=ch;
iden[1]='\0';
j=1; ch=fgetc(fp);
while((ch>='a'&&ch<='z')||(ch>='0'&&ch<
='9'))
{ iden[j]=ch;
j++;
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
ch=fgetc(fp)
;
}
iden[j]='\0';
lookahead=1; Accredited
by NAAC
token=0;
}
if(ch>='0'&&ch<='9')
{ num[0]=ch;
j=1;
ch=fgetc(fp);
while(ch>='0'&&ch<='9')
{ num[j]=ch;
j++;
ch=fgetc(fp)
;
}
iden[j]='\0'; lookahead=1;
token=-1; }
} } return
token; } int
chkkey() {
char *keyw;
int flag=0;
fseek(kfp,0,SEEK_SET);
while(!feof(kfp)) {
fscanf(kfp,"%s",keyw)
; if(strcmp(keyw,iden)==0) {
flag=1; break; } } return flag; }
OUTPUT:
create a file with source.c
in that write void main() {
int a;
}next create another file keyword.txt
in that write void main int float char
now u will get the output as follows
keyword main keyword void 16(
leftparanthesis
17) right parantehsis
14 { open brace
keyword int
identifier:a 13 ;
semicolon
15 } close brace
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
#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 999
charlexemes[MAX];
charbuffer[SIZE];
intlastchar=-1;
intlastentry=0;
inttokenval=DONE;
intlineno=1;
intlookahead;
structentry {
char*lexptr;
inttoken;
} symtable[100];
structentry
keywords[]=
{"if",KEYWORD,"else",KEYWORD,"for",KEYWORD,"int",KEYWORD,"float",KEYWORD,
"double",KEYWORD,"char",KEYWORD,"struct",KEYWORD,"ret urn",KEYWORD,0,0
}; voidError_Message(char*m)
{ fprintf(stderr,"line %d, %s
\n",lineno,m); exit(1);
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
} intlook_up(chars[
])
{
intk;
for(k=lastentry; k>0; k--)
if(strcmp(symtable[k].lexptr,s)==0)
returnk; return0; } intinsert(chars[
],inttok)
{ intlen;
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);
returnlastentry;
}
/*void Initialize()
{ struct entry *ptr;
for(ptr=keywords;ptr->token;ptr+1)
insert(ptr->lexptr,ptr->token);
}*/ intlexer() {
intt;
intval,i=0;
while(1) {
t=getchar();
if(t==' '||t=='\t');
elseif(t=='\n')
lineno=lineno+1;
elseif(isdigit(t))
{
ungetc(t,stdin);
scanf("%d",&tokenval);
returnNUM; }
elseif(isalpha(t))
{
while(isalnum(t))
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
{
buffer[i]=t;
t=getchar();
i=i+1;
if(i>=SIZE)
Error_Message("Compiler error");
}
buffer[i]=EOS; if(t!=EOF)
ungetc(t,stdin);
val=look_up(buffer);
if(val==0)
val=insert(buffer,ID);
tokenval=val;
returnsymtable[val].token;
}
elseif(t==EOF)
returnDONE; else
{
tokenval=NONE;
returnt;
}
}
}
voidMatch(intt)
{ if(lookahead==t)
lookahead=lexer();
else
Error_Message("Syntax error");
} voiddisplay(intt,inttval)
{ if(t=='+'||t=='-'||t=='*'||t=='/')
printf("\nArithmetic Operator: %c",t);
elseif(t==NUM)
printf("\n Number: %d",tval);
elseif(t==ID)
printf("\n Identifier: %s",symtable[tval].lexptr);
else printf("\n Token %d tokenval
%d",t,tokenval);
} voidF()
{
//void E();
switch(lookahead)
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
{
case'(':
Match('(');
E();
Match(')');
break; caseNUM :
display(NUM,tokenval);
Match(NUM); break;
caseID :
display(ID,tokenval);
Match(ID); break;
default:
Error_Message("Syntax error");
} } voidT() {
intt; 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;
}
} } voidE() {
intt; T();
while(1) {
switch(lookahead)
{ case'+':
t=lookahead; Match(lookahead);
T(); display(t,NONE); continue;
case'-':
t=lookahead;
Match(lookahead);
T();
display(t,NONE);
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
continue; default:
return;
}
} } voidparser() {
lookahead=lexer();
while(lookahead!=DONE)
{
E();
Match(';');
} }
intmain() {
charans[10];
printf("\n Program for recursive descent parsing ");
printf("\n Enter the expression "); printf("And
place ; at the end\n"); printf("Press Ctrl-Z to
terminate\n"); parser();<br>return0;
}
Output-
Program for recursive descent parsing
Enter the expression And place ; at the end
Press Ctrl-Z to terminate a*b+c;
Identifier: a
Identifier: b
Arithmetic Operator: *
Identifier: c
Arithmetic Operator: +
5*7;
Number: 5
Number: 7
Arithmetic Operator: *
*2;
line 5, Syntax error
ALGORITHM:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct three
{
char data[10],temp[7];
}s[30]; void
main()
{ char
d1[7],d2[7]="t"; int
i=0,j=1,len=0; FILE
*f1,*f2; clrscr();
f1=fopen("sum.txt","r"); f2=fopen("out.txt","w");
while(fscanf(f1,"%s",s[len].data)!=EOF)
len++; itoa(j,d1,7);
strcat(d2,d1);
strcpy(s[j].temp,d2);
strcpy(d1,"");
strcpy(d2,"t");
if(!strcmp(s[3].data,"+"))
{
fprintf(f2,"%s=%s+%s",s[j].temp,s[i+2].data,s[i+4].data);
j++; }
else if(!strcmp(s[3].data,"-"))
{
fprintf(f2,"%s=%s-%s",s[j].temp,s[i+2].data,s[i+4].data);
j++; }
for(i=4;i<len-2;i+=2)
{ itoa(j,d1,7);
strcat(d2,d1);
strcpy(s[j].temp,d2);
if(!strcmp(s[i+1].data,"+"))
fprintf(f2,"\n%s=%s+%s",s[j].temp,s[j-1].temp,s[i+2].data); else
if(!strcmp(s[i+1].data,"-"))
fprintf(f2,"\n%s=%s-%s",s[j].temp,s[j-1].temp,s[i+2].data);
strcpy(d1,""); strcpy(d2,"t"); j++; }
fprintf(f2,"\n%s=%s",s[0].data,s[j-1].temp);
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
fclose(f1);
fclose(f2);
getch(); }
Input: sum.txt
Output : out.txt
t1=in1+in2
t2=t1+in3 t3=t2-in4
out=t3
/*Z=accept;
N->error;
X->10; Y->11;*/ char
prod[7][4]={"0","E+T","T","T*F","F","(E)","d"};
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
char
index[12]={'0','1','2','3','4','5','6','7','8','9','X','Y'}; char
term[9]={'d','+','*','(',')','$','E','T','F'};
introw,col,st_pt=0,ip_pt=0; char input[10],
stack[20];
clrscr();
void main()
{
intj,k;
printf("\n enter input string :");
scanf("%s", input);
strcat(input,"$"); stack[0]='0';
for(j=0;j<7;j++) strcat(prod[j],"\0");
printf("\n STACK INPUT \n \n");
while(1)
{
for(k=0;k<=st_pt; k++)
printf("%c", stack[k]);
printf(" ");
for(k=ip_pt;input[k-
1]!='$';k++) printf("%c",
input[k]); printf("\n");
row=is_index(stack[st_pt]);
col=is_term(input[ip_pt]);
if(tab[row][col][0]=='S')
shift(tab[row][col][1]); else
if(tab[row][col][0]=='R')
reduce(tab[row][col][1]);
else
if(tab[row][col][0]=='Z')
{ printf (" \n success");
getch(); exit(0); } else
if(tab[row][col][0]=='N'
)
{ printf("\n
error"); getch();
exit(0); }
} }
shift(char
ch)
{
st_pt++; stack[st_pt++]=input[ip_pt++];
stack[st_pt]=ch;
}
reduce(char ch)
{
intk,prno,prlen,rowno,colno
; for(k=1;k<7;k++)
if(index[k]==ch) prno=k;
prlen=strlen(prod[prno]);
for(k=1;k<=2*prlen;k++) st_pt--;
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
st_pt++;
if(prno==1||prno==2)
stack[st_pt]='E';
else
if(prno==3||prno==4)
stack[st_pt]='T';
else if(prno==5||prno==6)
stack[st_pt]='F';
rowno=is_index(stack[st_pt-1]);
colno=is_term(stack[st_pt]);
stack[++st_pt]=tab[rowno][colno][0]
;
} is_index(char
ch) { int k;
for
(k=0;k<=9;k++)
if(index[k]==ch)
return(k);
if(ch=='X')
return(10); else
if(ch=='Y') return(11);
}
is_term(char ch)
{
int k;
for(k=0;k<9;k++)
if(term[k]==ch)
return(k);
}
OUTPUT:
enter input string(d*d)
Stack input
(d+d)$
O(4 d+d)$
0(4d5 +d)$
0(4f3 +d)$
0(4T2 +d)$
0(4E8 +d)$
0(4E8+6 d)$
0(4E8+6d5 )$
0(4E8+6F3 )$
0(4E8+6T9 )$
0(4e8)Y $
0f3 $
0T2 $
0E1 $ success
Aim: To Design and implement an LALR bottom up Parser for checking the syntax of the Statements in the given
language.
ALGORITHM/PROCEDURE:
Source Code : 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 ;}
| DIGIT
;
%% int
main()
KG College of Engineering & Technology
(Approved by AICTE, New Delhi, Affiliated to JNTUH, Hyderabad)
Chilkur (Village), Moinabad (Mandal), R. R Dist, TS-501504
{
yyparse();
}
yyerror(char *s)
{
printf("%s",s);
}
Output:
$lex parser.l
$yacc –d parser.y
$cc lex.yy.cy.tab.c –ll –lm
$./a.out
2+3
HOD PRINCIPAL