0% found this document useful (0 votes)
18 views25 pages

CD Record (Final)

Nothing

Uploaded by

Shereyas T.N
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views25 pages

CD Record (Final)

Nothing

Uploaded by

Shereyas T.N
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 25

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:

You might also like