#include <stdio.h>
#include <ctype.h>
#include <string.h>
typedef enum {
TOK_UNKNOWN,
TOK_OPERATOR
} TokenType;
typedef struct {
TokenType type;
char lexeme[3];
} Token;
static int is_op_start(char c) {
return c=='!' || c=='=' || c=='<' || c=='>' || c=='+' || c=='-' || c=='*' || c=='/';
}
Token getToken(const char *s, int *i) {
Token tok;
tok.type = TOK_UNKNOWN;
tok.lexeme[0] = '\0';
while (s
[*i
] && isspace((unsigned char)s
[*i
])) (*i
)++;
char c = s[*i];
if (!c) {
tok.type = TOK_UNKNOWN;
return tok;
}
if (c=='!' || c=='=' || c=='<' || c=='>') {
char c2 = s[*i+1];
if (c
=='!' && c2
=='=') { tok.
type = TOK_OPERATOR
; strcpy(tok.
lexeme, "!="); *i
+= 2; return tok
; } if (c
=='=' && c2
=='=') { tok.
type = TOK_OPERATOR
; strcpy(tok.
lexeme, "=="); *i
+= 2; return tok
; } if (c
=='<' && c2
=='=') { tok.
type = TOK_OPERATOR
; strcpy(tok.
lexeme, "<="); *i
+= 2; return tok
; } if (c
=='>' && c2
=='=') { tok.
type = TOK_OPERATOR
; strcpy(tok.
lexeme, ">="); *i
+= 2; return tok
; }
// If your lexer supports single-char versions of these:
if (c
=='<' ) { tok.
type = TOK_OPERATOR
; strcpy(tok.
lexeme, "<"); *i
+= 1; return tok
; } if (c
=='>' ) { tok.
type = TOK_OPERATOR
; strcpy(tok.
lexeme, ">"); *i
+= 1; return tok
; }
}
if (c=='+' || c=='-' || c=='*' || c=='/') {
tok.type = TOK_OPERATOR;
tok.lexeme[0] = c;
tok.lexeme[1] = '\0';
*i += 1;
return tok;
}
*i += 1;
return tok;
}
int main() {
char input[1000];
int i = 0;
printf("Enter a simple C code snippet: "); fgets(input
, sizeof(input
), stdin
);
while (input[i] != '\0') {
i++;
continue;
}
if (
(input[i] == '+' && input[i+1] == '=') ||
(input[i] == '-' && input[i+1] == '=') ||
(input[i] == '*' && input[i+1] == '=') ||
(input[i] == '/' && input[i+1] == '=') ||
(input[i] == '=' && input[i+1] == '=') ||
(input[i] == '!' && input[i+1] == '=') ||
(input[i] == '>' && input[i+1] == '=') ||
(input[i] == '<' && input[i+1] == '=')
) {
printf("OPERATOR: %c%c\n", input
[i
], input
[i
+1]); i += 2;
}
else if (input[i] == '+' || input[i] == '-' ||
input[i] == '*' || input[i] == '/' ||
input[i] == '=' || input[i] == '>' ||
input[i] == '<' || input[i] == '!') {
printf("OPERATOR: %c\n", input
[i
]); i++;
}
else {
i++;
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp0eXBlZGVmIGVudW0gewogICAgVE9LX1VOS05PV04sCiAgICBUT0tfT1BFUkFUT1IKfSBUb2tlblR5cGU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBUb2tlblR5cGUgdHlwZTsKICAgIGNoYXIgbGV4ZW1lWzNdOyAgIAp9IFRva2VuOwoKc3RhdGljIGludCBpc19vcF9zdGFydChjaGFyIGMpIHsKICAgIHJldHVybiBjPT0nIScgfHwgYz09Jz0nIHx8IGM9PSc8JyB8fCBjPT0nPicgfHwgYz09JysnIHx8IGM9PSctJyB8fCBjPT0nKicgfHwgYz09Jy8nOwp9CgpUb2tlbiBnZXRUb2tlbihjb25zdCBjaGFyICpzLCBpbnQgKmkpIHsKICAgIFRva2VuIHRvazsKICAgIHRvay50eXBlID0gVE9LX1VOS05PV047CiAgICB0b2subGV4ZW1lWzBdID0gJ1wwJzsKCiAgICB3aGlsZSAoc1sqaV0gJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcilzWyppXSkpICgqaSkrKzsKCiAgICBjaGFyIGMgPSBzWyppXTsKICAgIGlmICghYykgewogICAgICAgIHRvay50eXBlID0gVE9LX1VOS05PV047CiAgICAgICAgcmV0dXJuIHRvazsKICAgIH0KCiAgICBpZiAoYz09JyEnIHx8IGM9PSc9JyB8fCBjPT0nPCcgfHwgYz09Jz4nKSB7CiAgICAgICAgY2hhciBjMiA9IHNbKmkrMV07CiAgICAgICAgaWYgKGM9PSchJyAmJiBjMj09Jz0nKSB7IHRvay50eXBlID0gVE9LX09QRVJBVE9SOyBzdHJjcHkodG9rLmxleGVtZSwgIiE9Iik7ICppICs9IDI7IHJldHVybiB0b2s7IH0KICAgICAgICBpZiAoYz09Jz0nICYmIGMyPT0nPScpIHsgdG9rLnR5cGUgPSBUT0tfT1BFUkFUT1I7IHN0cmNweSh0b2subGV4ZW1lLCAiPT0iKTsgKmkgKz0gMjsgcmV0dXJuIHRvazsgfQogICAgICAgIGlmIChjPT0nPCcgJiYgYzI9PSc9JykgeyB0b2sudHlwZSA9IFRPS19PUEVSQVRPUjsgc3RyY3B5KHRvay5sZXhlbWUsICI8PSIpOyAqaSArPSAyOyByZXR1cm4gdG9rOyB9CiAgICAgICAgaWYgKGM9PSc+JyAmJiBjMj09Jz0nKSB7IHRvay50eXBlID0gVE9LX09QRVJBVE9SOyBzdHJjcHkodG9rLmxleGVtZSwgIj49Iik7ICppICs9IDI7IHJldHVybiB0b2s7IH0KCiAgICAgICAgLy8gSWYgeW91ciBsZXhlciBzdXBwb3J0cyBzaW5nbGUtY2hhciB2ZXJzaW9ucyBvZiB0aGVzZToKICAgICAgICBpZiAoYz09JzwnICkgeyB0b2sudHlwZSA9IFRPS19PUEVSQVRPUjsgc3RyY3B5KHRvay5sZXhlbWUsICI8Iik7ICAqaSArPSAxOyByZXR1cm4gdG9rOyB9CiAgICAgICAgaWYgKGM9PSc+JyApIHsgdG9rLnR5cGUgPSBUT0tfT1BFUkFUT1I7IHN0cmNweSh0b2subGV4ZW1lLCAiPiIpOyAgKmkgKz0gMTsgcmV0dXJuIHRvazsgfQoKCiAgICB9CgoKICAgIGlmIChjPT0nKycgfHwgYz09Jy0nIHx8IGM9PScqJyB8fCBjPT0nLycpIHsKICAgICAgICB0b2sudHlwZSA9IFRPS19PUEVSQVRPUjsKICAgICAgICB0b2subGV4ZW1lWzBdID0gYzsKICAgICAgICB0b2subGV4ZW1lWzFdID0gJ1wwJzsKICAgICAgICAqaSArPSAxOwogICAgICAgIHJldHVybiB0b2s7CiAgICB9CgogICAgKmkgKz0gMTsKICAgIHJldHVybiB0b2s7Cn0KCgoKaW50IG1haW4oKSB7CiAgICBjaGFyIGlucHV0WzEwMDBdOwogICAgaW50IGkgPSAwOwoKICAgIHByaW50ZigiRW50ZXIgYSBzaW1wbGUgQyBjb2RlIHNuaXBwZXQ6ICIpOwogICAgZmdldHMoaW5wdXQsIHNpemVvZihpbnB1dCksIHN0ZGluKTsKCiAgICBwcmludGYoIlxuVG9rZW5zIEZvdW5kOlxuIik7CgogICAgd2hpbGUgKGlucHV0W2ldICE9ICdcMCcpIHsKCiAgICAgICAgaWYgKGlzc3BhY2UoaW5wdXRbaV0pKSB7CiAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoCiAgICAgICAgICAgIChpbnB1dFtpXSA9PSAnKycgJiYgaW5wdXRbaSsxXSA9PSAnPScpIHx8CiAgICAgICAgICAgIChpbnB1dFtpXSA9PSAnLScgJiYgaW5wdXRbaSsxXSA9PSAnPScpIHx8CiAgICAgICAgICAgIChpbnB1dFtpXSA9PSAnKicgJiYgaW5wdXRbaSsxXSA9PSAnPScpIHx8CiAgICAgICAgICAgIChpbnB1dFtpXSA9PSAnLycgJiYgaW5wdXRbaSsxXSA9PSAnPScpIHx8CiAgICAgICAgICAgIChpbnB1dFtpXSA9PSAnPScgJiYgaW5wdXRbaSsxXSA9PSAnPScpIHx8CiAgICAgICAgICAgIChpbnB1dFtpXSA9PSAnIScgJiYgaW5wdXRbaSsxXSA9PSAnPScpIHx8CiAgICAgICAgICAgIChpbnB1dFtpXSA9PSAnPicgJiYgaW5wdXRbaSsxXSA9PSAnPScpIHx8CiAgICAgICAgICAgIChpbnB1dFtpXSA9PSAnPCcgJiYgaW5wdXRbaSsxXSA9PSAnPScpCiAgICAgICAgKSB7CiAgICAgICAgICAgIHByaW50ZigiT1BFUkFUT1I6ICVjJWNcbiIsIGlucHV0W2ldLCBpbnB1dFtpKzFdKTsKICAgICAgICAgICAgaSArPSAyOwogICAgICAgIH0KCiAgICAgICAgZWxzZSBpZiAoaW5wdXRbaV0gPT0gJysnIHx8IGlucHV0W2ldID09ICctJyB8fAogICAgICAgICAgICAgICAgIGlucHV0W2ldID09ICcqJyB8fCBpbnB1dFtpXSA9PSAnLycgfHwKICAgICAgICAgICAgICAgICBpbnB1dFtpXSA9PSAnPScgfHwgaW5wdXRbaV0gPT0gJz4nIHx8CiAgICAgICAgICAgICAgICAgaW5wdXRbaV0gPT0gJzwnIHx8IGlucHV0W2ldID09ICchJykgewogICAgICAgICAgICBwcmludGYoIk9QRVJBVE9SOiAlY1xuIiwgaW5wdXRbaV0pOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpKys7IAogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQ==