PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
PROGRAM: ( IMPLEMENTATION OF SYMBOL TABLE)
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
#include<math.h>
#include<ctype.h> void
main()
int i=0,j=0,x=0,n,flag=0;
void *p,*add[15];
char ch,srch,b[15],d[15],c;
//clrscr();
printf("expression terminated by $:");
while((c=getchar())!='$')
b[i]=c; i++;
n=i-1;
printf("given expression:");
i=0;
while(i<=n)
printf("%c",b[i]); i+
+;
printf("symbol table\n");
printf("symbol\taddr\ttype\n");
while(j<=n)
c=b[j];
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
if(isalpha(toascii(c)))
if(j==n)
p=malloc(c);
add[x]=p;
d[x]=c; printf("%c\t%d\tidentifier\
n",c,p);
else
ch=b[j+1];
if(ch=='+'||ch=='-'||ch=='*'||ch=='=')
p=malloc(c);
add[x]=p;
d[x]=c; printf("%c\t%d\tidentifier\
n",c,p); x++;
} j+
+;
printf("the symbol is to be searched\n");
srch=getch();
for(i=0;i<=x;i++)
if(srch==d[i])
printf("symbol found\n"); printf("%c%s%d\
n",srch,"@address",add[i]);
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
flag=1;
if(flag==0)
printf("symbol not found\n");
//getch();
OUTPUT:
RESULT:
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
PROGRAM: (LEXICAL ANALYZER USING LEX TOOL)
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<string.h>
char vars[100][100];
int vcnt;
char input[1000],c;
char token[50],tlen;
int state=0,pos=0,i=0,id;
char *getAddress(char
str[])
for(i=0;i<vcnt;i++)
if(strcmp(str,vars[i])==0)
return vars[i];
strcpy(vars[vcnt],str);
return vars[vcnt++];
int isrelop(char c)
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='%'||c=='^')
return 1;
else return 0;
int main(void)
clrscr();
printf("Enter the Input String:");
gets(input);
do
c=input[pos];
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
putchar(c);
switch(state)
case 0:
if(isspace(c))
printf("\b");
if(isalpha(c))
token[0]=c;
tlen=1;
state=1;
if(isdigit(c))
state=2;
if(isrelop(c))
state=3;
if(c==';')
printf("\t<4,4>\n");
break;
case 1:
if(!isalnum(c))
token[tlen]='\o'; printf("\b\t<1,%p>\
n",getAddress(token)); state=0;
pos--;
else token[tlen++]=c;
break;
case 2: if(!
isdigit(c))
{
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
printf("\b\t<2,%p>\n",&input[pos]);
state=0;
pos--;
break;
case 3:
id=input[pos-1];
if(c=='=')
printf("\t<%d,%d>\n",id*10,id*10);
else{ printf("\b\t<%d,%d>\n",id,id);
pos--;
state=0;
break;
pos++;
while(c!=0);
getch();
return 0;
}
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
OUTPUT:
RESULT:
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
PROGRAM:
%{
#include<stdio.h>
int op=0,i;
float a,b;
%}
dig[0-9]+|([0-9]*)"."([0-9]+)
add "+"
sub "-"
mul"*"
div "/"
pow "^"
ln \n
%%
{dig}{digi();}
{add}{op=1;}
{sub}{op=2;}
{mul}{op=3;}
{div}{op=4;}
{pow}{op=5;}
{ln}
printf("\n the result:%f\n\n",a);
%%
digi()
if(op==0)
a=atof(yytext);
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
else
b=atof(yytext);
switch(op)
case 1:
a=a+b;
break;
case 2:
a=a-b;
break;
case 3:
a=a*b;
break;
case 4:
a=a/b;
break;
case 5:
for(i=a;b>1;b--)
a=a*i;
break;
op=0;
main(int argv,char *argc[])
yylex();
yywrap()
return 1;
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
OUTPUT:
Lex cal.l
Cc lex.yy.c-ll
a.out 4*8
The result=32
RESULT:
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
PROGRAM:
%{
#include<stdio.h>
#include"y.tab.h
int k=1;
%}
%%
[0-9]+
yylval.dval=yytext[0];
return NUM;
\n
{return 0;}. {return yytext[0];}
%%
void yyerror(char* str)
printf("\n%s",str);
char *gencode(char word[],char first,char op,char second)
char temp[10];
sprintf(temp,"%d",k);
strcat(word,temp); k+
+;
printf("%s = %c %c %c\n",word,first,op,second);
return word; //Returns variable name like t1,t2,t3... properly
int yywrap()
{
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
return 1;
main()
yyparse();
return 0;
yacc.y
%{
#include<stdio.h>
int aaa;
%}
%union{ ch
ar dval;
%token <dval> NUM
%type <dval> E
%left '+' '-'
%left '*' '/' '%'
%%
statement : E {printf("\nt = %c \n",$1);}
E : E '+' E
char word[]="t";
char *test=gencode(word,$1,'+',$3);
$$=test;
| E '-' E
char word[]="t";
char *test=gencode(word,$1,'-',$3);
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
$$=test;
| E '%' E
char word[]="t";
char *test=gencode(word,$1,'%',$3);
$$=test;
| E '*' E
char word[]="t";
char *test=gencode(word,$1,'*',$3);
$$=test;
| E '/' E
char word[]="t";
char *test=gencode(word,$1,'/',$3);
$$=test;
| '(' E ')'
$$=$2;
| NUM
$$=$1;
%%
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
OUTPUT:
./a.out
3+2+1
T1=3+2
T2=N+1
t=N
RESULT:
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
PROGRAM: (SIMPLE CODE OPTIMIZATION TECHNIQUE)
Before:
Using for :
#include<iostream.h>
#include <conio.h>
int main()
int i, n;
int
fact=1;
cout<<"\nEnter a number: ";
cin>>n;
for(i=n;i>=1;i--)
fact=fact *i;
cout<<"The factoral value is: "<<fact;
getch();
return 0;
OUTPUT:
After: (SIMPLE CODE OPTIMIZATION TECHNIQUE)
Using do-while:
#include<iostream.h>
#include<conio.h>
void main()
clrscr();
int n,f;
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
f=1;
cout<<"Enter the number:\
n"; cin>>n;
do
f=f*n;
n--;
while(n>0);
cout<<"The factorial value is:"<<f;
getch();
OUTPUT:
RESULT:
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
PROGRAM: (BACK END OF THE COMPILER)
#include<stdio.h>
#include<stdio.h>
//#include<conio.h>
#include<string.h>
void main()
char icode[10][30],str[20],opr[10];
int i=0;
//clrscr();
printf("\n Enter the set of intermediate code (terminated by exit):\n");
do
scanf("%s",icode[i]);
while(strcmp(icode[i++],"exit")!=0);
printf("\n target code generation");
printf("\n************************");
i=0;
do
strcpy(str,icode[i]);
switch(str[3])
case '+':
strcpy(opr,"ADD");
break;
case '-':
strcpy(opr,"SUB");
break;
case '*':
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
strcpy(opr,"MUL");
break;
case '/':
strcpy(opr,"DIV");
break;
printf("\n\tMov %c,R%d",str[2],i);
printf("\n\t%s%c,R%d",opr,str[4],i);
printf("\n\tMov R%d,%c",i,str[0]);
}while(strcmp(icode[++i],"exit")!=0);
//getch();
OUTPUT:
RESULT:
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
PROGRAM: (STACK TO USE DYNAMIC STORAGE ALLOCATION)
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <alloc.h>
struct node
int label;
struct node *next;
};
void main()
int ch = 0;
int k;
struct node *h, *temp, *head;
head = (struct node*) malloc(sizeof(struct node)); head->next = NULL;
while(1)
printf("\n Stack using Linked List \
n"); printf("1->Push ");
printf("2->Pop ");
printf("3->View");
printf("4->Exit \n");
printf("Enter your choice :
"); scanf("%d", &ch);
switch(ch)
case 1:
temp=(struct node *)(malloc(sizeof(struct
node))); printf("Enter label for new node : ");
scanf("%d", &temp->label);
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
h = head;
temp->next = h->next; h->next = temp;
break;
case 2:
h = head->next;
head->next = h->next;
printf("Node %s deleted\n", h-
>label); free(h);
break;
case 3:
printf("\n HEAD -> ");
h = head;
while(h->next != NULL)
h = h->next;
printf("%d -> ",h->label);
printf("NULL \n");
break;
case 4:
exit(0);
}}
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
OUTPUT:
RESULT:
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
PROGRAM: (TO CONSTRUCT OF DAG(DIRECTED ACYCLIC GRAPH))
#include<stdio.h>
main()
struct da
int ptr,left,right;
char label;
dag[25];
int ptr,l,j,change,n=0,i=0,state=1,x,y,k;
char store,*input1,input[25],var;
clrscr();
for(i=0;i<25;i++)
dag[i].ptr=NULL;
dag[i].left=NULL;
dag[i].right=NULL;
dag[i].label=NULL;
printf("\n\nENTER THE EXPRESSION\n\n");
scanf("%s",input1);
/*EX:((a*b-c))+((b-c)*d)) like this give with paranthesis.limit is 25 char ucan change that*/ for(i=0;i<25;i+
+)
input[i]=NULL;
l=strlen(input1);
a:
for(i=0;input1[i]!=')';
i++);
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
for(j=i;input1[j]!='(';j--);
for(x=j+1;x<i;x++)
if(isalpha(input1[x]))
input[n++]=input1[x];
else if(input1[x]!='0')
store=input1[x]; input[n++]=store;
for(x=j;x<=i;x++) input1[x]='0';
if(input1[0]!='0')
goto a;
for(i=0;i<n;i++)
dag[i].label=input[i];
dag[i].ptr=i;
if(!isalpha(input[i])&&!isdigit(input[i]))
dag[i].right=i-1;
ptr=i;
var=input[i-1];
if(isalpha(var))
ptr=ptr-2;
else
ptr=i-1; b: if(!isalpha(var)&&!
isdigit(var))
ptr=dag[ptr].left;
var=input[ptr];
goto b;
else ptr=ptr-1;
dag[i].left=ptr;
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
printf("\n SYNTAX TREE FOR GIVEN EXPRESSION\n\n");
printf("\n\n PTR \t\t LEFT PTR \t\t RIGHT PTR \t\t LABEL\n\n");
for(i=0;i<n;i++
)/* draw the syntax tree for the following output with pointer value*/ printf("\n
%d\t%d\t%d\t%c\n",dag[i].ptr,dag[i].left,dag[i].right,dag[i].la bel); getch();
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if((dag[i].label==dag[j].label&&dag[i].left==dag[j].left)&&dag[ i].right==dag[j].right)
for(k=0;k<n;k++)
if(dag[k].left==dag[j].ptr)dag[k].left=dag[i].ptr;
if(dag[k].right==dag[j].ptr)dag[k].right=dag[i].ptr;
dag[j].ptr=dag[i].ptr;
printf("\n DAG FOR GIVEN EXPRESSION\n\n");
printf("\n\n PTR \t LEFT PTR \t RIGHT PTR \t LABEL \n\n");
for(i=0;i<n;i++)
/*draw DAG for the following output with pointer value*/
printf("\n %d\t\t%d\t\t%d\t\t%c\n",dag[i].ptr,dag[i].left,dag[i].right,dag[i].label);
getch();
}
PANIMALAR ENGINEERING COLLEGE
DEPARTMENT OF CSE
REG NO. 211421104223
OUTPUT:
RESULT: