Untitled
unknown
plain_text
20 days ago
2.7 kB
3
Indexable
#include <stdio.h> #include <string.h> char prol[7][10] = { "S", "A", "A", "B", "B", "C", "C" }; char pror[7][10] = { "A", "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; default: return -1; // Error case for invalid input } } int main() { int i, j, k; // Initialize the table with empty strings for (i = 0; i < 5; i++) { for (j = 0; j < 6; j++) { strcpy(table[i][j], " "); } } // Print grammar rules printf("The following grammar is used for Parsing Table:\n"); for (i = 0; i < 7; i++) { printf("%s\n", prod[i]); } // Fill the predictive parsing table based on FIRST and FOLLOW sets printf("\nPredictive parsing table:\n"); // Fill table using FIRST set for (i = 0; i < 7; i++) { k = strlen(first[i]); for (j = 0; j < k; j++) { if (first[i][j] != '@') { strcpy(table[numr(prol[i][0])][numr(first[i][j])], prod[i]); } } } // Fill table using FOLLOW set (for epsilon productions) for (i = 0; i < 7; i++) { if (strlen(pror[i]) == 1 && pror[i][0] == '@') { k = strlen(follow[i]); for (j = 0; j < k; j++) { strcpy(table[numr(prol[i][0])][numr(follow[i][j])], prod[i]); } } } // Set the header row and column for the table 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"); // Print the table printf("\n--------------------------------------------------------\n"); for (i = 0; i < 5; i++) { for (j = 0; j < 6; j++) { printf("%-10s", table[i][j]); if (j == 5) { printf("\n--------------------------------------------------------\n"); } } } return 0; }
Editor is loading...
Leave a Comment