a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言中使用lex統計文本文件字符數

2020-01-26 15:07:53
字體:
來源:轉載
供稿:網友

我曾經在Linux上寫的一個C程序,借助Lex做詞法分析來同時統計N個文本文件的字符數,單詞數和行數。讓我覺得Lex確實挺有意思的。確實Lex的功能非常強大,用來做小巧的詞法分析非常適合,也非常好用。這個程序參考了《Lex與Yacc》上的一個例子。

%{ unsigned int char_count = 0, word_count = 0, line_count = 0; %} %% [^ /t/n]+ {word_count++; char_count+=yyleng;}; /n {char_count++; line_count++;}; . char_count++; %% char **file_list; unsigned int current_file = 0; unsigned int total_file = 0; unsigned int total_cc = 0; unsigned int total_wc = 0; unsigned int total_lc = 0; typedef struct file_info{   unsigned int c;   unsigned int w;   unsigned int l;   char *name; }INFO; INFO **all; int create_info(int num) {   INFO *tmp;   int i;   if (num <= 0){     return -1;   }   all = (INFO **)malloc(sizeof(int *)*num);   for (i = 0; i < num; i++){     tmp = (INFO *)malloc(sizeof(INFO));     tmp->c = 0;     tmp->w = 0;     tmp->l = 0;     tmp->name = NULL;     all[i] = tmp;   }   return 1; }   int delete_info(int num) {   int i;   if ((all == (INFO **)0) || num <= 0){     return -1;   }   for (i = 0; i < num; i++){     free(all[i]);   }   free(all);   return 1; } int set_info(int pos) {   int length = 0;   if (pos < 0){     return -1;   }   all[pos]->c = char_count;   all[pos]->w = word_count;   all[pos]->l = line_count;     all[pos]->name = file_list[pos];      return 1; } int main(int argc, char** argv) {   FILE *file;     int position = 0;   int i;      file_list = argv + 1;   total_file = argc - 1;   current_file = 0;      printf("--------------------------------------------------------------/n",  total_file);      if (argc > 1){     if (create_info(total_file) == -1){       fprintf(stderr, "%s/n", "Encounter a error when malloc memory.");       exit(1);     }   }   if (argc == 2){                 file=fopen(argv[1], "r");     if (!file){       fprintf(stderr, "Could not open %s./n", argv[1]);       delete_info(total_file);       exit(1);     }         yyin = file;   }      yywrap();   yylex();     if (argc > 1){     total_cc += char_count;     total_wc += word_count;     total_lc += line_count;              if (set_info(current_file-1) == -1){       fprintf(stderr, "%s/n", "Encounter a error when set information to  INFO.");       delete_info(total_file);       exit(1);     }              for (i = 0; i < total_file; i++){       printf("char:%-8lu word:%-8lu line:%-8lu file name:%s/n", all[i]-> c, all[i]->w, all[i]->l, file_list[i]);     }     printf("----------------------- total -------------------------------- /n");     printf("chars:%-8lu words:%-8lu lines:%-8lu files:%d/n", total_cc, tot al_wc, total_lc, total_file);   }else{         printf("char:%-8lu word:%-8lu line:%-8lu/n", char_count, word_count, l ine_count);   }      delete_info(total_file);   return 0; }  yywrap() {   FILE *file = NULL;      if ((current_file > 0) && (current_file < total_file) && (total_file > 1)) {     total_cc += char_count;     total_wc += word_count;     total_lc += line_count;          if (set_info(current_file-1) == -1){       fprintf(stderr, "%s/n", "Encounter a error when set information to  INFO.");       delete_info(total_file);       exit(1);     }            char_count = word_count = line_count = 0;     fclose(yyin);       }   while ((file_list[current_file] != (char *)0) && (current_file < total_fil e)){          file = fopen(file_list[current_file++], "r");     if (!file){       fprintf(stderr, "could not open %s .", file_list[current_file - 1] );     }else{       yyin = file;       break;     }   }   return (file? 0 : 1); } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 色婷婷综合在线 | 久久精品视频18 | 欧美福利一区 | 欧美一区二区影院 | 亚洲tv国产 | 一级淫片免费 | www精品美女久久久tv | 黄色毛片视频在线观看 | 成人精品网站在线观看 | 色噜噜视频在线观看 | 午夜免费福利视频 | 国产一区二区精品在线 | 亚州精品视频 | 色网址在线 | 国产一区二区在线播放 | 一本色道久久综合狠狠躁篇的优点 | 国产不卡视频在线观看 | 久久成人激情视频 | 超碰免费在 | 久久99久久98精品免观看软件 | se69色成人网wwwsex | 看黄色.com | 成人欧美一区二区 | 亚洲精品成人 | 在线看黄色片 | 91久久久久久 | 久久精品久久久 | 国产偷录视频叫床高潮对白 | 国产精品视频一区二区三区不卡 | 日本精品一区二区 | 手机看片国产精品 | 亚洲一区二区三区四区五区中文 | 一区二区在线免费观看 | 亚洲精品电影在线观看 | 欧美视频亚洲视频 | 最新国产视频 | av中文字幕在线播放 | 国产精品久久久久久亚洲调教 | 高清日韩av | 久热久热 | 青青操狠狠干 |