1
%{
    #include <stdio.h>
    int sline=0,mline=0;
%}

%%
    "/*"[a-zA-Z0-9 \t\n]*"*/" { mline++; }
    "//".* { sline++; }
    .|\n { fprintf(yyout,"%s",yytext); }
%%

int main(int argc,char *argv[])
{
    if(argc!=3)
    {
        printf("Invalid number of arguments!\n");
        return 1;
    }
    yyin=fopen(argv[1],"r");
    yyout=fopen(argv[2],"w");
    yylex();
    printf("Single line comments = %d\nMultiline comments=%d\nTotal comments = %d\n",sline,mline,sline+mline);
    return 0;
}    

コメント行の数をカウントする Lex プログラムを作成しようとしています (単一行コメントと複数行コメントを別々に)。

このコードを使用して、入力引数と出力引数として .c ファイルと空白のテキスト ファイルを指定しました。
複数行のコメントに特殊文字がある場合、その複数行に対しては機能せず、コメント行に対して mline がインクリメントされません。

この問題を解決するにはどうすればよいですか?

4

3 に答える 3