-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathFrontEnd.c
90 lines (84 loc) · 1.5 KB
/
FrontEnd.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
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
void small();
void dove(int i);
int p[5] = {0,1,2,3,4},
c = 1, i, k, l, m, pi;
char sw[5] = {'=','-','+','/','*'},
j[20], a[5], b[5], ch[2];
void main()
{
printf("Enter the expression:");
scanf("%s", j);
printf("\tThe Intermediate code is:\n");
small();
}
void dove(int i)
{
a[0] = b[0] = '\0';
if (!isdigit(j[i + 2]) && !isdigit(j[i - 2]))
{
a[0] = j[i - 1];
b[0] = j[i + 1];
}
if (isdigit(j[i + 2]))
{
a[0] = j[i - 1];
b[0] = 't';
b[1] = j[i + 2];
}
if (isdigit(j[i - 2]))
{
b[0] = j[i + 1];
a[0] = 't';
a[1] = j[i - 2];
b[1] = '\0';
}
if (isdigit(j[i + 2]) && isdigit(j[i - 2]))
{
a[0] = 't';
b[0] = 't';
a[1] = j[i - 2];
b[1] = j[i + 2];
sprintf(ch, "%d", c);
j[i + 2] = j[i - 2] = ch[0];
}
if (j[i] == '*')
printf("\tt%d=%s*%s\n", c, a, b);
if (j[i] == '/')
printf("\tt%d=%s/%s\n", c, a, b);
if (j[i] == '+')
printf("\tt%d=%s+%s\n", c, a, b);
if (j[i] == '-')
printf("\tt%d=%s-%s\n", c, a, b);
if (j[i] == '=')
printf("\t%c=t%d", j[i - 1], --c);
sprintf(ch, "%d", c);
j[i] = ch[0];
c++;
small();
}
void small()
{
pi = 0;
l = 0;
for (i = 0; i < strlen(j); i++)
{
for (m = 0; m < 5; m++)
if (j[i] == sw[m])
if (pi <= p[m])
{
pi = p[m];
l = 1;
k = i;
}
}
if (l == 1)
dove(k);
else
exit(0);
}
// Sample Input
// a=b+c-d