#include <stdio.h>
#include <string.h>
int main() {
char input[100];
int state = 0;
printf("Enter a binary number: ");
scanf("%s", input);
int len = strlen(input);
for (int i = 0; i < len; i++) {
char symbol = input[i];
if (symbol != '0' && symbol != '1') {
printf("Invalid input! Only binary digits allowed.\n");
return 1;
}
if (symbol == '0')
state = 1;
else
state = 2;
}
if (state == 1)
printf("Accepted: Even binary number.\n");
else
printf("Rejected: Not an even binary number.\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
int state = 0;
printf("Enter a binary number: ");
scanf("%s", input);
int len = strlen(input);
for (int i = 0; i < len; i++) {
char symbol = input[i];
if (symbol != '0' && symbol != '1') {
printf("Invalid input! Only binary digits allowed.\n");
return 1;
}
if (symbol == '0')
state = 1;
else
state = 2;
}
if (state == 2)
printf("Accepted: Odd binary number.\n");
else
printf("Rejected: Not an odd binary number.\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
int state = 0;
printf("Enter a binary number: ");
scanf("%s", input);
int len = strlen(input);
for (int i = 0; i < len; i++) {
char symbol = input[i];
if (symbol != '0' && symbol != '1') {
printf("Invalid input! Only binary digits allowed.\n");
return 1;
}
switch(state) {
case 0:
state = (symbol == '0') ? 0 : 1;
break;
case 1:
state = (symbol == '0') ? 2 : 3;
break;
case 2:
state = (symbol == '0') ? 4 : 0;
break;
case 3:
state = (symbol == '0') ? 1 : 2;
break;
case 4:
state = (symbol == '0') ? 3 : 4;
break;
}
}
if (state == 0)
printf("Accepted: Binary number divisible by 5.\n");
else
printf("Rejected: Not divisible by 5.\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
int state = 0;
printf("Enter a binary number: ");
scanf("%s", input);
int len = strlen(input);
for (int i = 0; i < len; i++) {
char symbol = input[i];
if (symbol != '0' && symbol != '1') {
printf("Invalid input! Only binary digits allowed.\n");
return 1;
}
switch(state) {
case 0:
state = (symbol == '0') ? 0 : 1;
break;
case 1:
state = (symbol == '0') ? 2 : 0;
break;
case 2:
state = (symbol == '0') ? 1 : 2;
break;
}
}
if (state == 0)
printf("Accepted: Binary number divisible by 3.\n");
else
printf("Rejected: Not divisible by 3.\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
int state = 0;
printf("Enter a binary string: ");
scanf("%s", input);
int len = strlen(input);
for (int i = 0; i < len; i++) {
char symbol = input[i];
if (symbol != '0' && symbol != '1') {
printf("Invalid input! Only binary digits allowed.\n");
return 1;
}
switch(state) {
case 0:
state = (symbol == '0') ? 1 : 2;
break;
case 1:
state = (symbol == '0') ? 3 : 2;
break;
case 2:
state = (symbol == '0') ? 1 : 2;
break;
case 3:
state = (symbol == '0') ? 3 : 2;
break;
}
}
if (state == 3)
printf("Accepted: String ends with '00'.\n");
else
printf("Rejected: String does not end with '00'.\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
int state = 0;
printf("Enter a binary string: ");
scanf("%s", input);
int len = strlen(input);
for (int i = 0; i < len; i++) {
char symbol = input[i];
if (symbol != '0' && symbol != '1') {
printf("Invalid input! Only binary digits allowed.\n");
return 1;
}
switch(state) {
case 0:
state = (symbol == '0') ? 2 : 1;
break;
case 1:
state = (symbol == '0') ? 2 : 3;
break;
case 2:
state = (symbol == '0') ? 2 : 1;
break;
case 3:
state = (symbol == '0') ? 2 : 3;
break;
}
}
if (state == 3)
printf("Accepted: String ends with '11'.\n");
else
printf("Rejected: String does not end with '11'.\n");
return 0;
}
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char keywords[10][10] = {"int", "if", "else", "while", "return", "float", "char", "for", "do", "void"};
int isKeyword(char *word) {
for (int i = 0; i < 10; i++) {
if (strcmp(word, keywords[i]) == 0)
return 1;
}
return 0;
}
int main() {
char input[100];
char token[100];
int i = 0, j = 0;
printf("Enter a line of code: ");
fgets(input, sizeof(input), stdin);
while (input[i] != '\0') {
if (isalnum(input[i])) {
token[j++] = input[i];
} else {
if (j != 0) {
token[j] = '\0';
j = 0;
if (isKeyword(token))
printf("[Keyword: %s]\n", token);
else if (isdigit(token[0]))
printf("[Number: %s]\n", token);
else
printf("[Identifier: %s]\n", token);
}
if (input[i] == ' ' || input[i] == '\n') {
// skip
} else if (ispunct(input[i])) {
printf("[Symbol: %c]\n", input[i]);
}
}
i++;
}
return 0;
}
#include <stdio.h>
#define MAX 10
int main() {
int i, nNT, nT;
char NT[MAX], T[MAX], prod[MAX][MAX], first[MAX];
printf("Number of non-terminals: ");
scanf("%d", &nNT);
printf("Non-terminals:\n");
for (i = 0; i < nNT; i++)
scanf(" %c", &NT[i]);
printf("Number of terminals: ");
scanf("%d", &nT);
printf("Terminals:\n");
for (i = 0; i < nT; i++)
scanf(" %c", &T[i]);
printf("Enter production for each non-terminal:\n");
for (i = 0; i < nNT; i++) {
printf("%c → ", NT[i]);
scanf("%s", prod[i]);
}
for (i = 0; i < nNT; i++)
first[i] = prod[i][1];
printf("\nFirst Sets:\n");
for (i = 0; i < nNT; i++)
printf("First(%c) = { %c }\n", NT[i], first[i]);
return 0;
}
#include <stdio.h>
#include <ctype.h>
void 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");
}
#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;
}
#include <stdio.h>
int main() {
char nt, p1[20], p2[20];
int i;
printf("Enter non-terminal: ");
scanf(" %c", &nt);
printf("Enter first production: ");
scanf("%s", p1);
printf("Enter second production: ");
scanf("%s", p2);
if (p1[0] == nt) {
printf("\nLeft recursion exists!\n");
printf("After removing left recursion:\n");
printf("%c -> %s%c'\n", nt, p2, nt);
printf("%c' -> ", nt);
for (i = 1; p1[i]; i++) printf("%c", p1[i]);
printf("%c' | ε\n", nt);
}
else if (p2[0] == nt) {
printf("\nLeft recursion exists!\n");
printf("After removing left recursion:\n");
printf("%c -> %s%c'\n", nt, p1, nt);
printf("%c' -> ", nt);
for (i = 1; p2[i]; i++) printf("%c", p2[i]);
printf("%c' | ε\n", nt);
}
else {
printf("\nNo left recursion.\n");
printf("Grammar remains same: %c -> %s | %s\n", nt, p1, p2);
}
return 0;
}
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main() {
char expr[100], tok[100];
int i = 0, j = 0;
printf("Enter expression: ");
fgets(expr, sizeof(expr), stdin);
while (expr[i] != '\0') {
if (isdigit(expr[i])) {
tok[j++] = '6';
while (isdigit(expr[i])) i++;
i--;
}
else if (expr[i] == '+' || expr[i] == '-') tok[j++] = '2';
else if (expr[i] == '*') tok[j++] = '3';
else if (expr[i] == '(') tok[j++] = '4';
else if (expr[i] == ')') tok[j++] = '5';
i++;
}
tok[j] = '\0';
printf("\nTokenized: %s\n", tok);
int changed;
do {
changed = 0;
for (i = 0; tok[i + 2]; i++) {
if ((tok[i] == '6' && (tok[i+1] == '2' || tok[i+1] == '3') && tok[i+2] == '6') ||
(tok[i] == '4' && tok[i+1] == '6' && tok[i+2] == '5')) {
tok[i] = '6';
strcpy(&tok[i + 1], &tok[i + 3]);
printf("Reduced: %s\n", tok);
changed = 1;
break;
}
}
} while (changed);
if (strcmp(tok, "6") == 0)
printf("\n✅ Valid Expression\n");
else
printf("\n❌ Invalid Expression\n");
return 0;
}