免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123456
最近访问板块 发新帖
楼主: 雨丝风片
打印 上一主题 下一主题

请教去除c代码中的注释的方法 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
51 [报告]
发表于 2006-10-26 21:46 |只看该作者
如果printf的格式串中只含有“/*”,或用#if 0括起的部分中含有不配对的注释符,事情就复杂一些了。

论坛徽章:
0
52 [报告]
发表于 2006-10-27 15:15 |只看该作者
对!那样先得排除字符串里面的 /*,//,*/ !
得仔细进行一下词法分析了。。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
53 [报告]
发表于 2006-10-29 21:46 |只看该作者
用C来解决的办法。只适合配对的注释符的情况。前注释符被续行符分为两行的情况。

文件lex.l如下:
%{
        static skipcmnts();
%}


%%
"/*"    {skipcmnts();};
[\/][\\][\n]*    {skipcmnts();};
%%

extern FILE *fp2;
extern FILE *yyout;

static skipcmnts()
{       char ch;

        for(;
        {
                while((ch=input()) != '*');
                if((ch=input()) == '/')  return;
                if(ch== '*')  unput(yytext[yyleng-1]);
        }
}
/* End of file */

文件main.c如下:
#include <ctype.h>
#include <stdio.h>
#include <sys/types.h>
#include <string.h>

yywrap()  {return(1);}


main (ac,av)
    int ac;
    char *av[];
   {
        yyin =  stdin;
        yyout =  stdout;
        while(yylex()) {}
   }
/* end of file */

文件makefile如下:

m:      m.c
        cc -o m m.c

lex.yy.c:       lex.l
        lex lex.l


m.c:    main.c lex.yy.c
        cat lex.yy.c  main.c > m.c

#end of file

编译:
make m
执行:
./m < xxx.c > xxx1.c

[ 本帖最后由 zongyaotang 于 2006-11-1 08:15 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP