Skip to content

Instantly share code, notes, and snippets.

@hasinur1997
Last active November 15, 2019 03:57
Show Gist options
  • Save hasinur1997/813c1625a2c5baa64da62ca63ea45dc4 to your computer and use it in GitHub Desktop.
Save hasinur1997/813c1625a2c5baa64da62ca63ea45dc4 to your computer and use it in GitHub Desktop.
#include<stdio.h>

void lexicalAnalyzer(char s[]);
int isIdent(char ch);
int isAlpha(char ch);
int isDigit(char ch);
int isOperator(char ch);
int isDelemeter(char ch);
void display(char s[100][32], int n);
void checking(int (*f)(char), int indexI, int indexJ, char ch);

char op[] = {'=', '+', '-', '*', '/', '%'};
char del[] = {',', ':', ';'};

char indent[100][32];
char operator[100][32];
char delemeter[100][32];

int IDi = 0, IDj = 0, OPi = 0, OPj = 0, DEi = 0, DEj = 0;

char A[100];

int i = 0, k;

int main()
{
    gets(A);
    lexicalAnalyzer(A);
    display(indent, IDi);
    display(operator, OPi);
    display(delemeter, DEi);
    return 0;
}

void display(char s[100][32], int n) {
    int k;

    for(k = 0; k < n; k++) {
        printf("%s\n", s[k]);
    }
}

void lexicalAnalyzer(char s[])
{
    while (s[i]) {
        if (isIdent(s[i])) {
            while (isIdent(s[i])) {
                indent[IDi][IDj] = s[i];
                IDj++;
                i++;
            }
            IDi++;
            IDj = 0;

        } else if (isOperator(s[i])) {
            while (isOperator(s[i])) {
                operator[OPi][OPj] = s[i];
                OPj++;
                i++;
            }
            OPi++;
            OPj = 0;
        } else if (isDelemeter(s[i])) {
            while (isDelemeter(s[i])) {
                delemeter[DEi][DEj] = s[i];
                DEj++;
                i++;
            }
            DEi++;
            DEj = 0;
        } else {
            i++;
        }
    }

}

int isIdent(char ch) {
    if (isAlpha(ch) || isDigit(ch)) {
        return 1;
    }

    return 0;
}

int isDigit(char ch) {
    if (ch >= '0' && ch <= '9') {
        return 1;
    }

    return 0;
}

int isAlpha(char ch) {
    if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
        return 1;
    }
    return 0;
}

int isOperator(char ch) {
    int k;

    for (k = 0; op[k]; k++) {
        if (ch == op[k]) {
            return 1;
        }
    }

    return 0;
}

int isDelemeter(char ch) {
    int k;

    for (k = 0; del[k]; k++) {
        if (ch == del[k]) {
            return 1;
        }
    }

    return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment