免费注册 查看新帖 |

Chinaunix

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

有多少种方法可以去掉c代码中的注释? [复制链接]

论坛徽章:
0
41 [报告]
发表于 2006-10-24 23:02 |只看该作者
还有,既然有正则表达式,我想应该不需要按字符读取全文的,只需要定位到/*所在行开始即可.

论坛徽章:
0
42 [报告]
发表于 2006-10-24 23:04 |只看该作者
原帖由 wrl 于 2006-10-24 22:59 发表
你看看这个办法可不可以,找到/*,然后一个字符一个字符删除随后的内容,直到*/,而不理会是否跨行等问题


这个思路比较适合写个c程序,算是一种方法。
不过最好是有最终实现的代码,因为这个方法之间的比较主要是代码繁简的比较。

不知道有没有现成工具可以采用这一模型进行处理的。

论坛徽章:
0
43 [报告]
发表于 2006-10-24 23:06 |只看该作者
awk有函数可以做到的,她连printf都有

论坛徽章:
0
44 [报告]
发表于 2006-10-24 23:08 |只看该作者
而且极有可能从"扫描集"这个地方突破

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
45 [报告]
发表于 2006-10-24 23:44 |只看该作者
刚写了一个 发现和gvim兄给的差不多啊.

http://bbs.chinaunix.net/viewthr ... &extra=page%3D1

论坛徽章:
0
46 [报告]
发表于 2006-10-25 00:00 |只看该作者
刚才看了一下awk的定义,觉得awk不适合解决这个问题.

论坛徽章:
0
47 [报告]
发表于 2006-10-25 00:05 |只看该作者
文件本身是一种流,一种线性的数据结构,而注释就好比是一条线段上的区间,以某种标记开始,另一种标记结束.
所以我们可以定义两种操作,打开文件以后对字节默认为放行,碰上/*, //等开关开始抛弃,碰上*/, nl等开关开始放行.因此,我觉得解决这个问题的最好工具应该是sed,而awk更适合作为一种小型的数据操作语言.

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
48 [报告]
发表于 2006-10-25 00:32 |只看该作者
在网上找了个lex的,更简单的,可处理任意 /* ... */ 注释
"/*"([^\*]|(\*)*[^\*/])*(\*)*"*/"


  1. %{
  2. %}
  3. comment  "/*"([^\*]|(\*)*[^\*/])*(\*)*"*/"
  4. %%
  5. {comment} {  }
  6. %%
复制代码

$lex comm.l
$gcc -o erase lex.yy.c -lfl
$./erase <  test.c > test.plain.c

论坛徽章:
0
49 [报告]
发表于 2006-10-25 09:01 |只看该作者
多谢楼上各位赐教!

我把截至目前大家提出的方法都汇总到了这个帖子中:

http://bbs.chinaunix.net/viewthr ... &extra=page%3D1

论坛徽章:
0
50 [报告]
发表于 2006-10-25 09:05 |只看该作者
原帖由 wrl 于 2006-10-25 00:05 发表
文件本身是一种流,一种线性的数据结构,而注释就好比是一条线段上的区间,以某种标记开始,另一种标记结束.
所以我们可以定义两种操作,打开文件以后对字节默认为放行,碰上/*, //等开关开始抛弃,碰上*/, nl等开关开始 ...


分析得有道理。不过从目前提出的方法来看,最“短”方法还是awk的:
  1. awk 'BEGIN{RS="/\*|\*/"} NR%2'  foo.c
复制代码


这个是sed的脚本之一:
  1. sed -n 'H;${g;s#/\*[^*]*\*/##g;s/\n *\n//g;p}' foo.c
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP