Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <windows.h>
- #define TRUE 1
- #define FALSE 0
- char const *KEYWORDS[] = {
- "auto",
- "break",
- "case",
- "char",
- "const",
- "continue",
- "default",
- "do",
- "double",
- "else",
- "enum",
- "extern",
- "float",
- "for",
- "goto",
- "if",
- "int",
- "long",
- "register",
- "return",
- "short",
- "signed",
- "sizeof",
- "static",
- "struct",
- "switch",
- "typedef",
- "union",
- "unsigned",
- "void",
- "volatile",
- "while",
- "include",
- "define"
- };
- char const *separators = " .,*][()+=-;\"\'";
- const int SEP_COUNT = 11;
- const int KEYWORDS_COUNT = 34;
- const int MAX_STR_SIZE = 256;
- int is_char(const char c){
- return (c >= 'a' && c <='z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c =='_';
- }
- int is_num (const char *s){
- int i = 0;
- for (i; i < strlen(s); i++)
- if (s[i] < '0' || s[i] > '9') return 0;
- return 1;
- }
- int main() {
- FILE * fp;
- char line[MAX_STR_SIZE];
- HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
- fp = fopen("file.txt", "r");
- if (fp == NULL)
- exit(1);
- while (fgets (line, sizeof(line), fp)) {
- int begin = 0;
- int end = 0;
- int line_size = strlen(line);
- while(1){
- //серый цвет
- SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY);
- //ищем начало идентификатора, остальные выводим
- while(begin < line_size){
- if (!is_char(line[begin]))
- printf("%c", line[begin]);
- else
- break;
- begin++;
- }
- end = begin;
- //ищем конец идентификатора
- while (is_char(line[end])) end++;
- //выход, если перевалили конец строки
- if (end >= line_size) break;
- //в buf идентификатор
- char buf[MAX_STR_SIZE];
- strncpy(buf, "", MAX_STR_SIZE);
- strncpy(buf, line + begin, end - begin);
- int i = 0;
- //проверяем, является ли ключевым словом
- for (i; i < KEYWORDS_COUNT; i++)
- if (strcmp(buf, KEYWORDS[i]) == 0) break;
- //если не ключевое слово и не число
- if (i == KEYWORDS_COUNT && !is_num(buf)){
- int k = 0;
- //проверка кавычек
- for (k; k < line_size; k++)
- if (line[k-1] == '\"' || line[k-1] == '<') break;
- int t = k + 1;
- for (t; t < line_size; t++)
- if (line[t-1] == '\"' || line[t-1] == '>') break;
- if (t == line_size) t = 0;
- //если слово не в кавычках, меняем цвет на синий
- if (!(k <= begin && t > end))
- SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE);
- }
- printf("%s", buf);
- begin = end;
- }
- }
- getchar();
- fclose(fp);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement