-
Notifications
You must be signed in to change notification settings - Fork 3
/
code_op.c
101 lines (101 loc) · 2.31 KB
/
code_op.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <stdio.h>
#include <string.h>
struct op
{
char l;
char r[20];
} op[10], pr[10];
void main()
{
int a, i, k, j, n, z = 0, m, q;
char *p, *l;
char temp, t;
char *tem;
printf("Enter the Number of Values:");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("left: ");
scanf(" %c", &op[i].l);
printf("right: ");
scanf(" %s", &op[i].r);
}
printf("Intermediate Code\n");
for (i = 0; i < n; i++)
{
printf("%c=", op[i].l);
printf("%s\n", op[i].r);
}
for (i = 0; i < n - 1; i++)
{
temp = op[i].l;
for (j = 0; j < n; j++)
{
p = strchr(op[j].r, temp);
if (p)
{
pr[z].l = op[i].l;
strcpy(pr[z].r, op[i].r);
z++;
}
}
}
pr[z].l = op[n - 1].l;
strcpy(pr[z].r, op[n - 1].r);
z++;
printf("\nAfter Dead Code Elimination\n");
for (k = 0; k < z; k++)
{
printf("%c\t=", pr[k].l);
printf("%s\n", pr[k].r);
}
for (m = 0; m < z; m++)
{
tem = pr[m].r;
for (j = m + 1; j < z; j++)
{
p = strstr(tem, pr[j].r);
if (p)
{
t = pr[j].l;
pr[j].l = pr[m].l;
for (i = 0; i < z; i++)
{
l = strchr(pr[i].r, t);
if (l)
{
a = l - pr[i].r;
printf("pos: %d\n", a);
pr[i].r[a] = pr[m].l;
}
}
}
}
}
printf("Eliminate Common Expression\n");
for (i = 0; i < z; i++)
{
printf("%c\t=", pr[i].l);
printf("%s\n", pr[i].r);
}
for (i = 0; i < z; i++)
{
for (j = i + 1; j < z; j++)
{
q = strcmp(pr[i].r, pr[j].r);
if ((pr[i].l == pr[j].l) && !q)
{
pr[i].l = '\0';
}
}
}
printf("Optimized Code\n");
for (i = 0; i < z; i++)
{
if (pr[i].l != '\0')
{
printf("%c=", pr[i].l);
printf("%s\n", pr[i].r);
}
}
}