去除 C/C++/Java 源代码中的注释: flex 词法分析源程序 |
发布: 2008-05-29 23:05 |
刚开始用 lex & yacc 写东西,今天偶然想到一个去掉C/C++/Java代码中注释的方法,顺便写了出来。 看了lex没几天,写的代码还比较生硬。 说明: 这个编译出来的程序有两个输出,一个是错误信息输出到了标准错误输出(stderr),一个是不处理过的不包含注释的源代码码到标准输出(stdout)。 可以使用下面的命令分别保存 stderr 和 stdout的输出: ./ucl < some_file.c 2>some_file_comment.txt >some_file_clean.c 将下面的代码保存为 ucl.fl, 然后使用下面的命令编译: [code type="bash"] flex -dv ucl.fl gcc -o ucl lex.yy.c -lfl ./ucl < some_file.c [/code]
[code type="c"] %{ #include #include #include char cmc_buffer[8096]; %} %s CMCS STRING %% BEGIN (CMCS); memset(cmc_buffer, 0, sizeof(cmc_buffer)); strcpy(cmc_buffer, yytext); } cmc_buffer[strlen(cmc_buffer)] = yytext[0]; } cmc_buffer[strlen(cmc_buffer)] = yytext[0]; } strcat(cmc_buffer, yytext); fprintf(stderr, "nCMC at line %d : n[[-------n%sn-----------]]n", yylineno, cmc_buffer); BEGIN (INITIAL); } BEGIN (STRING); ECHO; } BEGIN (INITIAL); ECHO; } . { BEGIN (INITIAL); ECHO ; } %% /* 用法: flex -dv ucl.fl gcc -o ucl lex.yy.c -lfl ./ucl < some_file.c */ int main(int argc, char **arg) { yylex(); return 0; } [/code] |
原文: http://qtchina.tk/?q=node/133 |
Powered by zexport
|