0% found this document useful (0 votes)
9 views2 pages

Predictive Parser

The document is a C program that constructs a predictive parsing table for a given grammar. It defines production rules, first sets, and follow sets, and populates a table based on these definitions. The program outputs the grammar and the resulting predictive parsing table to the console.

Uploaded by

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

Predictive Parser

The document is a C program that constructs a predictive parsing table for a given grammar. It defines production rules, first sets, and follow sets, and populates a table based on these definitions. The program outputs the grammar and the resulting predictive parsing table to the console.

Uploaded by

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

#include<stdio.

h>
#include<string.h>

char prol[7][10] = {"s", "A", "A", "B", "B", "C", "C"};


char pror[7][10] = {"Aa", "Bb", "Cd", "aB", "@", "Cc", "@"};
char prod[7][10] = {"s-->A", "A-->Bb", "A-->Cd", "B-->aB", "B-->@", "C-->Cc", "C--
>@"};
char first[7][10] = {"abcd", "ab", "cd", "a@", "@", "c@", "@"};
char follow[7][10] = {"$", "$", "$", "a$", "b$", "c$", "d$"};
char table[5][6][10];

int numr(char c) {
switch (c) {
case 'S': return 0;
case 'A': return 1;
case 'B': return 2;
case 'C': return 3;
case 'a': return 0;
case 'b': return 1;
case 'c': return 2;
case 'd': return 3;
case '$': return 4;
}
return 2; // Default case
}

int main() {
int i, j, k;

for (i = 0; i < 5; i++)


for (j = 0; j < 6; j++)
strcpy(table[i][j], " ");

printf("\n The following is the predictive parsing table for the following
grammar:\n");
for (i = 0; i < 7; i++)
printf("%s\n", prod[i]);

printf("\n Predictive parsing table is:\n ");

for (i = 0; i < 7; i++) {


k = strlen(first[i]);
for (j = 0; j < 10; j++)
if (first[i][j] != '@')
strcpy(table[numr(prol[i][0]) + 1][numr(first[i][j]) + 1],
prod[i]);
}

for (i = 0; i < 7; i++) {


if (strlen(pror[i]) == 1) {
if (pror[i][0] == '@') {
k = strlen(follow[i]);
for (j = 0; j < k; j++)
strcpy(table[numr(prol[i][0]) + 1][numr(follow[i][j]) + 1],
prod[i]);
}
}
}
strcpy(table[0][0], " ");
strcpy(table[0][1], "a");
strcpy(table[0][2], "b");
strcpy(table[0][3], "c");
strcpy(table[0][4], "d");
strcpy(table[0][5], "$");
strcpy(table[1][0], "S");
strcpy(table[2][0], "A");
strcpy(table[3][0], "B");
strcpy(table[4][0], "C");

printf("\
n-----------------------------------------------------------------------------\n");
for (i = 0; i < 5; i++) {
for (j = 0; j < 6; j++) {
printf("%s\t", table[i][j]);
}
printf("\n");
}

printf("---------------------------------------------------------------------------
--\n");

return 0;
}

You might also like