#include <stdio.h>
#define MAX 10
int main() {
int i, numNT, numT;
char NT[MAX], T[MAX];
char prod[MAX][MAX];
char first[MAX];
printf("Enter number of non-terminals: ");
scanf("%d", &numNT);
printf("Enter non-terminals:\n");
for (i = 0; i < numNT; i++)
scanf(" %c", &NT[i]);
printf("Enter number of terminals (use { for epsilon): ");
scanf("%d", &numT);
printf("Enter terminals:\n");
for (i = 0; i < numT; i++)
scanf(" %c", &T[i]);
printf("Enter one production for each non-terminal (end RHS with $):\n");
for (i = 0; i < numNT; i++) {
printf("Production for %c: ", NT[i]);
scanf(" %s", prod[i]);
}
for (i = 0; i < numNT; i++) {
first[i] = prod[i][1];
}
printf("\nFirst Sets:\n");
for (i = 0; i < numNT; i++) {
printf("First(%c) = { %c }\n", NT[i], first[i]);
}
return 0;
}
💡 Sample I/O:
Input:
2
A B
3
a b {
Aa$
Bb$
Output:
First(A) = { a }
First(B) = { b }
String Identifier Checker
#include <stdio.h>
#include <ctype.h>
int main() {
char str[50];
int i, flag = 1;
printf("Enter the string: ");
scanf("%s", str);
if (!(isalpha(str[0]) || str[0] == '_')) {
flag = 0;
} else {
for (i = 1; str[i] != '\0'; i++) {
if (!(isalnum(str[i]) || str[i] == '_')) {
flag = 0;
break;
}
}
}
if (flag)
printf("Identifier\n");
else
printf("Not Identifier\n");
}
💡 Sample I/O:
Input: _value2 Output: Identifier
Keyword Checker
#include <stdio.h>
#include <string.h>
int main() {
char keywords[5][10] = {"printf", "scanf", "if", "else", "break"};
char str[10];
int i, flag = 0;
printf("Enter the string: ");
scanf("%s", str);
for (i = 0; i < 5; i++) {
if (strcmp(str, keywords[i]) == 0) {
flag = 1;
break;
}
}
if (flag)
printf("Keyword\n");
else
printf("String\n");
return 0;
}