FLEX&BISON:去除C代码注释和其中的多余空行

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:05   1927   0

使用两个flex程序来完成。

去除注释flex代码文件flex1:

%option noyywrap
%x COMMENT

%{
%}
%%
"//".* {}
"/*" {BEGIN COMMENT;}
<COMMENT>"*/" {BEGIN INITIAL;}
<COMMENT>. {}
. {printf("%s", yytext);}
%%

int main(int argc, char *argv[]){
    const char *input_filename = "input";
    if (argc == 2){ 
        input_filename = argv[1];
    }   
    yyin = fopen(input_filename, "r");
    yylex();
    fclose(yyin);
    return 0;
}

去除多余空行(连续的多行空行会被合并为一个空行)代码文件flex2

%option noyywrap
%x COMMENT

%{
int num_newline = 0;
%}
%%
^[ \t\n]+ {if (num_newline == 0){++num_newline; printf("\n");}}
. {printf("%s", yytext); num_newline = 0;} 
%%

int main(int argc, char *argv[]){
    const char *input_filename = "input";
    if (argc == 2){ 
        input_filename = argv[1];
    }   
    yyin = fopen(input_filename, "r");
    if (!yyin){
        perror("failed to open file\n");
        return -1; 
    }   
    yylex();
    fclose(yyin);
    return 0;
}

编译:

flex -o c1 flex1
gcc -o exe1 c1
flex -o c2 flex2
gcc -o exe2 c2

测试:

./exe1 input > tmp
./exe2 tmp > output

output中的代码以及没有了注释和多余空行。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP