#include<stdio.h>
#include<ctype.h>
#include<string.h>

int main() {
    FILE *input = fopen("input.c", "r");
    char ch, str[20], dig[20];
    int l = 1, i = 0, k = 0;
    char keyword[6][10] = {"int", "void", "if", "else", "do", "while"};

    printf("Line No.\tToken\t\tLexeme\n");

    while((ch = fgetc(input)) != EOF) {
        if (ch == '\n') {
            l++;
        } else if (isspace(ch)) {
            continue;
        } else if (ispunct(ch)) {
            if (ch == '/' && (ch = fgetc(input)) == '/') {
                while ((ch = fgetc(input)) != '\n');
                l++;
            } else {
                printf("%d\t\tOperator/Symbol\t%c\n", l, ch);
            }
        } else if (isdigit(ch)) {
            dig[k++] = ch;
            while (isdigit(ch = fgetc(input))) dig[k++] = ch;
            dig[k] = '\0';
            ungetc(ch, input);
            printf("%d\t\tNumber\t\t%s\n", l, dig);
            k = 0;
        } else if (isalpha(ch)) {
            str[i++] = ch;
            while (isalnum(ch = fgetc(input))) str[i++] = ch;
            str[i] = '\0';
            ungetc(ch, input);

            int isKeyword = 0;
            for (int j = 0; j < 6; j++) {
                if (strcmp(str, keyword[j]) == 0) {
                    printf("%d\t\tKeyword\t\t%s\n", l, str);
                    isKeyword = 1;
                    break;
                }
            }
            if (!isKeyword) {
                printf("%d\t\tIdentifier\t%s\n", l, str);
            }
            i = 0;
        }
    }

    fclose(input);
    return 0;
}
