社区
数据结构与算法
帖子详情
flex 中c的注释/*aaa*/的正则表达式如何写?
alphapaopao
2003-10-13 12:48:09
"/*"(([^*]|("*"[^/*]))*)("*"/"*")*("*/") printf("c comments:\n\n%s[END]\n\n\n", yytext);
这是我写的,后来发现不对。
注释的DFA很容易做出来,但是为什么他的正则表达式那么难写?
...全文
417
18
打赏
收藏
flex 中c的注释/*aaa*/的正则表达式如何写?
"/*"(([^*]|("*"[^/*]))*)("*"/"*")*("*/")printf("c comments:\n\n%s[END]\n\n\n", yytext); 这是我写的,后来发现不对。 注释的DFA很容易做出来,但是为什么他的正则表达式那么难写?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
borlang
2003-10-20
打赏
举报
回复
这样也可以:(/\*).*?(\*/)
alphapaopao
2003-10-16
打赏
举报
回复
ttmmdd(老孩子) 的的确可以,我已经成功匹配
/**/
/***/
/*aa*/
/*aa**/
alphapaopao
2003-10-14
打赏
举报
回复
/*aa**/ 无法正确匹配
ttmmdd
2003-10-14
打赏
举报
回复
恩?我用到现在没问题啊?
warton
2003-10-14
打赏
举报
回复
贴子不错!!我还是用php时简单地学习了一下正则表达式,现在忘记得差不多了!
alphapaopao
2003-10-14
打赏
举报
回复
ttmmdd(老孩子) 的不行,我的也不行
ttmmdd
2003-10-14
打赏
举报
回复
我试过了,可以匹配的.
/*aa**/
《/*》 匹配 "/*"
《aa》 匹配 (([^*/])+([/])*)*
《*》 匹配 (
*
(([^*/])+([/])*)*)因为 (([^*/])+([/])*)*可以为空.
《*/》 匹配 "*/"
warton
2003-10-14
打赏
举报
回复
试试这个:((\/\*((\*[^\/]+)|[^\*])+\*\/)|(\/\/))
alphapaopao
2003-10-14
打赏
举报
回复
哇!!置顶了!
alphapaopao
2003-10-13
打赏
举报
回复
"/*"([^*]|\*[^/*])*"*/"
这个好像也可以
alphapaopao
2003-10-13
打赏
举报
回复
楼上的牛!!!
不过我还没理解这个表达式
ttmmdd
2003-10-13
打赏
举报
回复
这个是可以地...
"/*"(
*
(([^*/])+([/])*)*)*"*/"
alphapaopao
2003-10-13
打赏
举报
回复
== 对于 /*foo*abc*/ 的匹配过程 == 注:《》里面是要匹配的字符串
《/*》 匹配 "/*"
《foo》 匹配 [^*]
《*》 foo后面的*匹配 \*(\**)
《abc》将从头匹配,因为它是重复多个的 ([^*]*\*(\**))+ ,它匹配到了这个表达式开头的 [^*]
《*》 abc后面的*匹配 \*(\**)
《/》 匹配 "/"
请大虾指教!
alphapaopao
2003-10-13
打赏
举报
回复
== 对于 /*foo*abc*/ 的匹配过程 == 注:《》里面是要匹配的字符串
《/*》 匹配 "/*"
《foo》 foo后面的*匹配 [^*]
《*》 匹配 \*(\**)
《abc》将从头匹配,因为它是重复多个的 ([^*]*\*(\**))+ ,它匹配到了这个表达式开头的 [^*]
《*》 abc后面的*匹配 \*(\**)
《/》 匹配 "/"
请大虾指教!
alphapaopao
2003-10-13
打赏
举报
回复
"/*"([^*]*\*(\**))+"/"
我觉得我这个应该没问题阿,是在看不出来什么地方有问题。还请指教:
"/*" 匹配开始标记
[^*]* 匹配不是*的字符
\* 匹配一个星号*
\** 匹配*,0个,若干个
([^*]*\*(\**))+ 这样的情况1个,或多个
"/" 最后匹配结束符号 /
== 对于 /* define a integer variable */ 的匹配过程 == 注:《》里面是要匹配的字符串
《/*》 匹配 "/*"
《 define a integer variable 》 匹配 [^*]
《*》 匹配 \*(\**)
《/》 匹配 "/"
Riemann
2003-10-13
打赏
举报
回复
写注释的正则表达式要考虑得东西很多。在你的表达式中很多情况都是不能匹配到的。
例如:int i; /* define a integer variable */
/* comment */ /* This is
a comment */
下面是我曾经看到过的一种写法,感觉挺不错的。
%{
int comments, code, spaceline;
%}
%x COMMENT
%%
^[ \t]*"/*" { BEGIN COMMENT; /* 进入注视处理状态 */ }
^[ \t]*"/*".*"*/"[ \t]*\n { comments++; /* 处理注释的自包含 */ }
<COMMENT>"*/"[ \t]*\n { BEGIN 0; comments++; }
<COMMENT>"*/" { BEGIN 0; }
<COMMENT>\n { comments++; } /* 处理注释中的空行 */
<COMMENT>.\n { comments++; } /* 处理注释中的文本 */
^[ \t]*\n { spaceline++; } /* 处理空行 */
.+"/*".*"*/".*\n { code++; }
.*"/*".*"*/".+\n { code++; }
.+"/*".*\n { code++; BEGIN COMMENT; }
.\n { code++; }
.; /* 忽略其他 */
%%
main()
{
yylex();
printf("code: %d, commnents: %d, spaceline: %d\n",
code, comments, spaceline);
}
alphapaopao
2003-10-13
打赏
举报
回复
"/*"([^*]*\*(\**))+"/"
冥思苦想,这个看样子是可以的。但是还是匹配不到。郁闷
alphapaopao
2003-10-13
打赏
举报
回复
up
编译原理 C-Minus词法分析(
FLEX
)
本文介绍如何使用
Flex
构建词法分析器,对C语言子集C--的源代码进行词法分析,识别并处理各种数制、浮点数、科学计数法及词法错误。
用lex处理C语言的
注释
博主在实践
中
遇到将C语言代码文件
注释
中
非空白字符替换为空格的需求,以保证新文件行数与原文件一致便于调试。博主用
flex
完成了代码编
写
并测试成功,还提及linux下的实验过程及vs2017下使用
flex
+bison的参考文章。
编译原理lab1-利用
FLEX
构造C-Minus-f词法分析器
本实验报告介绍了如何使用
FLEX
构造C-Minus-f词法分析器的过程,包括学习词法规则、
FLEX
工具使用及分析器的实现与验证。
flex
处理c语言
注释
,第08章 用
flex
做词法分析
本文详细介绍了如何使用
flex
对TinyC源文件进行词法分析,通过扩展word-spliter程序,列举TinyC的各类token,编
写
正则表达式
和对应的处理规则。内容包括单字符和双字符运算符、关键字以及整数、字符串和标识符的识别,并给出了词法错误处理方法。文章还提供了词法分析器的源代码文件和编译过程,以及测试样例的运行结果。
编译原理实验一:词法分析工具
Flex
本文介绍如何使用词法分析工具
Flex
完成词法分析器的搭建,重点讲解词法单元的
正则表达式
及动作设置,并针对
注释
的处理进行了详细说明。通过实验设计与测试验证,展示了词法分析器的有效性和正确性。
数据结构与算法
33,026
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章