Untitled
unknown
plain_text
19 days ago
9.3 kB
3
Indexable
-Write a c program to check the validity of input string using predictive parser Description: A predictive parser is a recursive descent parser with no backtracking or backup. It is a top-down parser that does not require backtracking. At each step, the choice of the rule to be expanded is made upon the next terminal symbol. Program:- #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@", "@" }; 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); } int main() { int i, j, k; for (i = 0; i < 5; i++) for (j = 0; j < 6; j++) strcpy(table[i][j], " "); printf("The following grammar is used for Parsing Table:\n"); for (i = 0; i < 7; i++) printf("%s\n", prod[i]); printf("\nPredictive parsing table:\n"); fflush(stdin); 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("%-10s", table[i][j]); if (j == 5) printf("\n--------------------------------------------------------\n"); } } } } } } } } } }
Editor is loading...
Leave a Comment