Advertisement
Guest User

Untitled

a guest
Apr 21st, 2015
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. #define TRUE 1
  5. #define FALSE 0
  6.  
  7. char const *KEYWORDS[] = {
  8. "auto",
  9. "break",
  10. "case",
  11. "char",
  12. "const",
  13. "continue",
  14. "default",
  15. "do",
  16. "double",
  17. "else",
  18. "enum",
  19. "extern",
  20. "float",
  21. "for",
  22. "goto",
  23. "if",
  24. "int",
  25. "long",
  26. "register",
  27. "return",
  28. "short",
  29. "signed",
  30. "sizeof",
  31. "static",
  32. "struct",
  33. "switch",
  34. "typedef",
  35. "union",
  36. "unsigned",
  37. "void",
  38. "volatile",
  39. "while",
  40. "include",
  41. "define"
  42.  
  43. };
  44. char const *separators = " .,*][()+=-;\"\'";
  45. const int SEP_COUNT = 11;
  46. const int KEYWORDS_COUNT = 34;
  47. const int MAX_STR_SIZE = 256;
  48.  
  49. int is_char(const char c){
  50. return (c >= 'a' && c <='z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c =='_';
  51. }
  52. int is_num (const char *s){
  53. int i = 0;
  54. for (i; i < strlen(s); i++)
  55. if (s[i] < '0' || s[i] > '9') return 0;
  56. return 1;
  57. }
  58.  
  59. int main() {
  60. FILE * fp;
  61. char line[MAX_STR_SIZE];
  62. HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  63. fp = fopen("file.txt", "r");
  64. if (fp == NULL)
  65. exit(1);
  66. while (fgets (line, sizeof(line), fp)) {
  67. int begin = 0;
  68. int end = 0;
  69. int line_size = strlen(line);
  70. while(1){
  71. //серый цвет
  72. SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY);
  73. //ищем начало идентификатора, остальные выводим
  74. while(begin < line_size){
  75. if (!is_char(line[begin]))
  76. printf("%c", line[begin]);
  77. else
  78. break;
  79. begin++;
  80. }
  81. end = begin;
  82. //ищем конец идентификатора
  83. while (is_char(line[end])) end++;
  84. //выход, если перевалили конец строки
  85. if (end >= line_size) break;
  86. //в buf идентификатор
  87. char buf[MAX_STR_SIZE];
  88. strncpy(buf, "", MAX_STR_SIZE);
  89. strncpy(buf, line + begin, end - begin);
  90. int i = 0;
  91. //проверяем, является ли ключевым словом
  92. for (i; i < KEYWORDS_COUNT; i++)
  93. if (strcmp(buf, KEYWORDS[i]) == 0) break;
  94. //если не ключевое слово и не число
  95. if (i == KEYWORDS_COUNT && !is_num(buf)){
  96. int k = 0;
  97. //проверка кавычек
  98. for (k; k < line_size; k++)
  99. if (line[k-1] == '\"' || line[k-1] == '<') break;
  100. int t = k + 1;
  101. for (t; t < line_size; t++)
  102. if (line[t-1] == '\"' || line[t-1] == '>') break;
  103. if (t == line_size) t = 0;
  104. //если слово не в кавычках, меняем цвет на синий
  105. if (!(k <= begin && t > end))
  106. SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE);
  107. }
  108. printf("%s", buf);
  109. begin = end;
  110. }
  111. }
  112. getchar();
  113. fclose(fp);
  114. return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement