之前在完成任务的时候,自学完成flex任务,虽然不是太难,但是在“跳过注释”这一方面却花费了比较长的时间,在这我分享出来我自己的经验
flex
test.txt
首先要分析要注释的开始符和终结符是什么
在这里是:
/* */ (多行注释)
// (单行注释)
代码如下
#include<stdio.h>
int main()
{
//printf("this is a test\n");
/*this ia a comment
*/
return 0;
}
之后就是flex编写程序了
%x COMMENT
%{%}
%%"//".* { } /*跳过单行注释*/
"/*" {BEGIN COMMENT;}
<COMMENT>"*/" {BEGIN INITIAL;}
<COMMENT>. {} /*跳过多行注释*/
. {printf("%s", yytext);} /*用来测试,看是否已经跳过注释*/
%%
int main(int argc, char **argv){
FILE *fp;
if (argc != 2){
printf("参数错误!\n");
exit(0);
}
fp= argv[1];
yyin = fopen(fp, "r");
yylex();
fclose(yyin);
return 0;
}
int yywrap(){
return 1;
}
运行之后结果如下,这样就完整的达到跳过注释的目的
注意相关的正则表达式一定要正确写对!!!!