我想計算關於C++程序的「空行」,「單個註釋」,「塊註釋」。爲什麼正則表達式「//」和「/ *」不能匹配單個註釋和塊註釋?
我寫的工具使用flex.But該工具無法匹配的c + +塊的評論。
1撓曲代碼:
%{
int block_flag = 0;
int empty_num = 0;
int single_line_num = 0;
int block_line_num = 0;
int line = 0;
%}
%%
^[\t ]*\n {
empty_num++;
printf("empty line\n");
}
"//" {
single_line_num++;
printf("single line comment\n");
}
"/*" {
block_flag = 1;
block_line_num++;
printf("block comment begin.block line:%d\n", block_line_num);
}
"*/" {
block_flag = 0;
printf("block comment end.block line:%d\n", block_line_num);
}
^(.*)\n {
if(block_flag)
block_line_num++;
else
line++;
}
%%
int main(int argc , char *argv[])
{
yyin = fopen(argv[1], "r");
yylex();
printf("lines :%d\n" ,line);
fclose(yyin);
return 0;
}
2的hello.c
[email protected]:~$ cat hello.c
#include <stdlib.h>
//
//
/*
*/
/* */
3輸出
[email protected]:~$ ./a.out hello.c
empty line
empty line
lines :6
爲什麼 「//」 和 「/ *」 所不能比擬的單個評論和塊評論?
這應該用Adobe/Apache Flex進行標記; UI框架?或者這個問題與詞法分析器有關嗎?如果後者;你可能想用Lex/gnu-flex標籤來標記它。這個問題讓我感到困惑。 – JeffryHouser
@ www.Flextras.com這是gnu-flex.thank你! – bbg