l#include <stdio.h>
#include <string.h>
#include <ctype.h>
void keyword(char str[])
{
const char *keys[] = {
"for","while","do","int","float","char","double",
"static","switch","case","return","if","else","break","continue"
};
int n = sizeof(keys)/sizeof(keys[0]);
for(int i=0;i<n;i++)
if(strcmp(str,keys[i])==0) {
printf("\n%s is a keyword",str);
return;
}
printf("\n%s is an identifier",str);
}
int main()
{
FILE *f1,*f2,*f3;
char c, str[50];
int num[100], lineno=1, tokenvalue=0;
int i=0,j=0,k=0;
printf("Enter the C program (Ctrl+D to end):\n");
f1 = fopen("input.c","w");
while((c=getchar())!=EOF)
putc(c,f1);
fclose(f1);
f1 = fopen("input.c","r");
f2 = fopen("identifiers.txt","w");
f3 = fopen("specialchar.txt","w");
while((c=getc(f1))!=EOF)
{
if(isdigit((unsigned char)c))
{
tokenvalue = c - '0';
while(isdigit((unsigned char)(c=getc(f1))))
tokenvalue = tokenvalue*10 + (c-'0');
num[i++] = tokenvalue;
ungetc(c,f1);
}
else if(isalpha((unsigned char)c) || c=='_')
{
putc(c,f2);
while(isalnum((unsigned char)(c=getc(f1))) || c=='_')
putc(c,f2);
putc(' ',f2);
ungetc(c,f1);
}
else if(c==' ' || c=='\t') { }
else if(c=='\n') lineno++;
else putc(c,f3);
}
fclose(f1); fclose(f2); fclose(f3);
printf("\nNumbers found: ");
for(j=0;j<i;j++)
printf("%d ",num[j]);
f2=fopen("identifiers.txt","r");
printf("\n\nKeywords and Identifiers:");
k=0;
while((c=getc(f2))!=EOF)
{
if(c!=' ')
str[k++]=c;
else {
str[k]='\0';
keyword(str);
k=0;
}
}
fclose(f2);
f3=fopen("specialchar.txt","r");
printf("\n\nSpecial characters: ");
while((c=getc(f3))!=EOF)
printf("%c",c);
fclose(f3);
printf
("\n\nTotal
number of lines
: %d\n", lineno);
return 0;
}
bCNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgoKdm9pZCBrZXl3b3JkKGNoYXIgc3RyW10pCnsKICAgIGNvbnN0IGNoYXIgKmtleXNbXSA9IHsKICAgICAgICAiZm9yIiwid2hpbGUiLCJkbyIsImludCIsImZsb2F0IiwiY2hhciIsImRvdWJsZSIsCiAgICAgICAgInN0YXRpYyIsInN3aXRjaCIsImNhc2UiLCJyZXR1cm4iLCJpZiIsImVsc2UiLCJicmVhayIsImNvbnRpbnVlIgogICAgfTsKICAgIGludCBuID0gc2l6ZW9mKGtleXMpL3NpemVvZihrZXlzWzBdKTsKICAgIAogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgICAgICBpZihzdHJjbXAoc3RyLGtleXNbaV0pPT0wKSB7CiAgICAgICAgICAgIHByaW50ZigiXG4lcyBpcyBhIGtleXdvcmQiLHN0cik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICBwcmludGYoIlxuJXMgaXMgYW4gaWRlbnRpZmllciIsc3RyKTsKfQoKaW50IG1haW4oKQp7CiAgICBGSUxFICpmMSwqZjIsKmYzOwogICAgY2hhciBjLCBzdHJbNTBdOwogICAgaW50IG51bVsxMDBdLCBsaW5lbm89MSwgdG9rZW52YWx1ZT0wOwogICAgaW50IGk9MCxqPTAsaz0wOwoKICAgIHByaW50ZigiRW50ZXIgdGhlIEMgcHJvZ3JhbSAoQ3RybCtEIHRvIGVuZCk6XG4iKTsKCiAgICBmMSA9IGZvcGVuKCJpbnB1dC5jIiwidyIpOwogICAgd2hpbGUoKGM9Z2V0Y2hhcigpKSE9RU9GKQogICAgICAgIHB1dGMoYyxmMSk7CiAgICBmY2xvc2UoZjEpOwoKICAgIGYxID0gZm9wZW4oImlucHV0LmMiLCJyIik7CiAgICBmMiA9IGZvcGVuKCJpZGVudGlmaWVycy50eHQiLCJ3Iik7CiAgICBmMyA9IGZvcGVuKCJzcGVjaWFsY2hhci50eHQiLCJ3Iik7CgogICAgd2hpbGUoKGM9Z2V0YyhmMSkpIT1FT0YpCiAgICB7CiAgICAgICAgaWYoaXNkaWdpdCgodW5zaWduZWQgY2hhciljKSkKICAgICAgICB7CiAgICAgICAgICAgIHRva2VudmFsdWUgPSBjIC0gJzAnOwogICAgICAgICAgICB3aGlsZShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKShjPWdldGMoZjEpKSkpCiAgICAgICAgICAgICAgICB0b2tlbnZhbHVlID0gdG9rZW52YWx1ZSoxMCArIChjLScwJyk7CiAgICAgICAgICAgIG51bVtpKytdID0gdG9rZW52YWx1ZTsKICAgICAgICAgICAgdW5nZXRjKGMsZjEpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKGlzYWxwaGEoKHVuc2lnbmVkIGNoYXIpYykgfHwgYz09J18nKQogICAgICAgIHsKICAgICAgICAgICAgcHV0YyhjLGYyKTsKICAgICAgICAgICAgd2hpbGUoaXNhbG51bSgodW5zaWduZWQgY2hhcikoYz1nZXRjKGYxKSkpIHx8IGM9PSdfJykKICAgICAgICAgICAgICAgIHB1dGMoYyxmMik7CiAgICAgICAgICAgIHB1dGMoJyAnLGYyKTsKICAgICAgICAgICAgdW5nZXRjKGMsZjEpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKGM9PScgJyB8fCBjPT0nXHQnKSB7IH0KICAgICAgICBlbHNlIGlmKGM9PSdcbicpIGxpbmVubysrOwogICAgICAgIGVsc2UgcHV0YyhjLGYzKTsKICAgIH0KCiAgICBmY2xvc2UoZjEpOyBmY2xvc2UoZjIpOyBmY2xvc2UoZjMpOwoKICAgIHByaW50ZigiXG5OdW1iZXJzIGZvdW5kOiAiKTsKICAgIGZvcihqPTA7ajxpO2orKykKICAgICAgICBwcmludGYoIiVkICIsbnVtW2pdKTsKCiAgICBmMj1mb3BlbigiaWRlbnRpZmllcnMudHh0IiwiciIpOwogICAgcHJpbnRmKCJcblxuS2V5d29yZHMgYW5kIElkZW50aWZpZXJzOiIpOwogICAgaz0wOwogICAgd2hpbGUoKGM9Z2V0YyhmMikpIT1FT0YpCiAgICB7CiAgICAgICAgaWYoYyE9JyAnKQogICAgICAgICAgICBzdHJbaysrXT1jOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBzdHJba109J1wwJzsKICAgICAgICAgICAga2V5d29yZChzdHIpOwogICAgICAgICAgICBrPTA7CiAgICAgICAgfQogICAgfQogICAgZmNsb3NlKGYyKTsKCiAgICBmMz1mb3Blbigic3BlY2lhbGNoYXIudHh0IiwiciIpOwogICAgcHJpbnRmKCJcblxuU3BlY2lhbCBjaGFyYWN0ZXJzOiAiKTsKICAgIHdoaWxlKChjPWdldGMoZjMpKSE9RU9GKQogICAgICAgIHByaW50ZigiJWMiLGMpOwogICAgZmNsb3NlKGYzKTsKCiAgICBwcmludGYoIlxuXG5Ub3RhbCBudW1iZXIgb2YgbGluZXM6ICVkXG4iLCBsaW5lbm8pOwoKICAgIHJldHVybiAwOwp9Cg==