#include <stdio.h>
#include <ctype.h>
#include <string.h>
char keywords[5][10] = {"int", "float", "if", "else", "return"};
int isKeyword(char *word) {
for (int i = 0; i < 5; i++) {
if (strcmp(word, keywords[i]) == 0)
return 1;
}
return 0;
}
int main() {
char ch, buffer[50];
int i = 0;
FILE *fp = fopen("input.c", "r");
if (fp == NULL) {
printf
("Cannot
open file\n"
); return 1;
}
while ((ch = fgetc(fp)) != EOF) {
// Identifier or keyword
if (isalpha(ch)) {
buffer[i++] = ch;
while (isalnum(ch = fgetc(fp))) {
buffer[i++] = ch;
}
buffer[i] = '\0';
i = 0;
fseek(fp, -1, SEEK_CUR);
if (isKeyword(buffer))
printf("Keyword: %s\n", buffer);
else
printf("Identifier: %s\n", buffer);
}
else if (isdigit(ch)) {
buffer[i++] = ch;
while (isdigit(ch = fgetc(fp))) {
buffer[i++] = ch;
}
buffer[i] = '\0';
i = 0;
fseek(fp, -1, SEEK_CUR);
printf
("
Number: %s\n", buffer); }
// Operators
else if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '=') {
printf("Operator: %c\n", ch);
}
// Special characters
else if (ch == ';' || ch == ',' || ch == '(' || ch == ')' ||
ch == '{' || ch == '}') {
printf("Special Symbol: %c\n", ch);
}
}
fclose(fp);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgpjaGFyIGtleXdvcmRzWzVdWzEwXSA9IHsiaW50IiwgImZsb2F0IiwgImlmIiwgImVsc2UiLCAicmV0dXJuIn07CgppbnQgaXNLZXl3b3JkKGNoYXIgKndvcmQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAgICAgICAgaWYgKHN0cmNtcCh3b3JkLCBrZXl3b3Jkc1tpXSkgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4oKSB7CiAgICBjaGFyIGNoLCBidWZmZXJbNTBdOwogICAgaW50IGkgPSAwOwoKICAgIEZJTEUgKmZwID0gZm9wZW4oImlucHV0LmMiLCAiciIpOwogICAgaWYgKGZwID09IE5VTEwpIHsKICAgICAgICBwcmludGYoIkNhbm5vdCBvcGVuIGZpbGVcbiIpOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHdoaWxlICgoY2ggPSBmZ2V0YyhmcCkpICE9IEVPRikgewoKICAgICAgICAvLyBJZGVudGlmaWVyIG9yIGtleXdvcmQKICAgICAgICBpZiAoaXNhbHBoYShjaCkpIHsKICAgICAgICAgICAgYnVmZmVyW2krK10gPSBjaDsKICAgICAgICAgICAgd2hpbGUgKGlzYWxudW0oY2ggPSBmZ2V0YyhmcCkpKSB7CiAgICAgICAgICAgICAgICBidWZmZXJbaSsrXSA9IGNoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICdcMCc7CiAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICBmc2VlayhmcCwgLTEsIFNFRUtfQ1VSKTsKCiAgICAgICAgICAgIGlmIChpc0tleXdvcmQoYnVmZmVyKSkKICAgICAgICAgICAgICAgIHByaW50ZigiS2V5d29yZDogJXNcbiIsIGJ1ZmZlcik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHByaW50ZigiSWRlbnRpZmllcjogJXNcbiIsIGJ1ZmZlcik7CiAgICAgICAgfQoKICAgICAgICAvLyBOdW1iZXIKICAgICAgICBlbHNlIGlmIChpc2RpZ2l0KGNoKSkgewogICAgICAgICAgICBidWZmZXJbaSsrXSA9IGNoOwogICAgICAgICAgICB3aGlsZSAoaXNkaWdpdChjaCA9IGZnZXRjKGZwKSkpIHsKICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gY2g7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnVmZmVyW2ldID0gJ1wwJzsKICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgIGZzZWVrKGZwLCAtMSwgU0VFS19DVVIpOwoKICAgICAgICAgICAgcHJpbnRmKCJOdW1iZXI6ICVzXG4iLCBidWZmZXIpOwogICAgICAgIH0KCiAgICAgICAgLy8gT3BlcmF0b3JzCiAgICAgICAgZWxzZSBpZiAoY2ggPT0gJysnIHx8IGNoID09ICctJyB8fCBjaCA9PSAnKicgfHwgY2ggPT0gJy8nIHx8IGNoID09ICc9JykgewogICAgICAgICAgICBwcmludGYoIk9wZXJhdG9yOiAlY1xuIiwgY2gpOwogICAgICAgIH0KCiAgICAgICAgLy8gU3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAgICAgZWxzZSBpZiAoY2ggPT0gJzsnIHx8IGNoID09ICcsJyB8fCBjaCA9PSAnKCcgfHwgY2ggPT0gJyknIHx8CiAgICAgICAgICAgICAgICAgY2ggPT0gJ3snIHx8IGNoID09ICd9JykgewogICAgICAgICAgICBwcmludGYoIlNwZWNpYWwgU3ltYm9sOiAlY1xuIiwgY2gpOwogICAgICAgIH0KICAgIH0KCiAgICBmY2xvc2UoZnApOwogICAgcmV0dXJuIDA7Cn0K