8)RECURSIVE DESCENT PARSER
Mon Apr 07 2025 19:48:20 GMT+0000 (Coordinated Universal Time)
Saved by
@sem
#include <stdio.h>
#define SUCCESS 1
#define FAILED 0
const char *cursor;
char input[64];
int E(), Edash(), T(), Tdash(), F();
int main() {
printf("Enter the string: ");
scanf("%s", input);
cursor = input;
printf("\nInput Action\n");
printf("-------------------------------\n");
if (E() && *cursor == '\0') {
printf("-------------------------------\n");
printf("String is successfully parsed\n");
} else {
printf("-------------------------------\n");
printf("Error in parsing String\n");
}
return 0;
}
int E() {
printf("%-15s E -> T E'\n", cursor);
return T() && Edash();
}
int Edash() {
if (*cursor == '+') {
printf("%-15s E' -> + T E'\n", cursor);
cursor++;
return T() && Edash();
}
printf("%-15s E' -> ε\n", cursor);
return SUCCESS;
}
int T() {
printf("%-15s T -> F T'\n", cursor);
return F() && Tdash();
}
int Tdash() {
if (cursor == '') {
printf("%-15s T' -> * F T'\n", cursor);
cursor++;
return F() && Tdash();
}
printf("%-15s T' -> ε\n", cursor);
return SUCCESS;
}
int F() {
if (*cursor == '(') {
printf("%-15s F -> ( E )\n", cursor);
cursor++;
if (E() && *cursor == ')') {
cursor++;
return SUCCESS;
}
return FAILED;
} else if (*cursor == 'i') {
printf("%-15s F -> i\n", cursor);
cursor++;
return SUCCESS;
}
return FAILED;
}
content_copyCOPY
Comments