Intermediate Code
Intermediate Code
h>
#include <string.h>
int i = 0, j = 0, tmpch = 90; // Initialize global variables
char str[100], left[15], right[15];
void findopr();
void explore();
void fleft(int);
void fright(int);
void sort_operators(); // Function prototype for sorting operators
struct exp {
int pos;
char op;
} k[15];
void main() {
printf("\t\tINTERMEDIATE CODE GENERATION\n\n");
printf("Enter the Expression :");
scanf("%s", str);
printf("The intermediate code:\t\tExpression\n");
findopr();
sort_operators(); // Sort operators by precedence
explore();
}
void findopr() {
for (i = 0; str[i] != '\0'; i++) {
if (str[i] == ':') {
k[j].pos = i;
k[j++].op = ':';
} else if (str[i] == '/') {
k[j].pos = i;
k[j++].op = '/';
} else if (str[i] == '*') {
k[j].pos = i;
k[j++].op = '*';
} else if (str[i] == '+') {
k[j].pos = i;
k[j++].op = '+';
} else if (str[i] == '-') {
k[j].pos = i;
k[j++].op = '-';
}
}
}
void sort_operators() {
// Bubble sort based on operator precedence
for (int p = 0; p < j - 1; p++) {
for (int q = 0; q < j - p - 1; q++) {
int precedence1 = (k[q].op == '+' || k[q].op == '-') ? 1 : 2;
int precedence2 = (k[q + 1].op == '+' || k[q + 1].op == '-') ? 1 : 2;
void explore() {
i = 0; // Start with the first operator in sorted order
while (i < j) {
fleft(k[i].pos);
fright(k[i].pos);
str[k[i].pos] = tmpch--;
printf("\t%c := %s%c%s\t\t", str[k[i].pos], left, k[i].op, right);
void fleft(int x) {
int w = 0, flag = 0;
x--;
while (x != -1 && str[x] != '+' && str[x] != '*' && str[x] != '=' && str[x] != '\0' && str[x] != '-' && str[x] != '/' &&
str[x] != ':') {
if (str[x] != '$' && flag == 0) {
left[w++] = str[x];
left[w] = '\0';
str[x] = '$';
flag = 1;
}
x--;
}
}
void fright(int x) {
int w = 0, flag = 0;
x++;
while (str[x] != '\0' && str[x] != '+' && str[x] != '*' && str[x] != '/' && str[x] != '-' && str[x] != ':') {
if (str[x] != '$' && flag == 0) {
right[w++] = str[x];
right[w] = '\0';
str[x] = '$';
flag = 1;
}
x++;
}
}
OUTPUT:
INTERMEDIATE CODE GENERATION
Enter the Expression :a+b*c+d
The intermediate code: Expression
Z := b*c a+Z+d
Y := a+Z Y+d
X := Y+d X
$ := X