• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-59  評論-36  文章-0  trackbacks-0

            以下兩則代碼均是在向論壇上的高手們學習之后模仿出的結(jié)果,而自己之前寫的那叫個臭呀!

            代碼1

             1/*
             2* 用狀態(tài)機實現(xiàn)對代碼中注釋的清除.
             3*/

             4
             5#include <stdio.h>
             6#include <string.h>
             7
             8#define SCREEN
             9
            10void initialize_fsm(char fsm[7][256]);
            11
            12int main()
            13{
            14    int ch , temp = 0 ;
            15    int state = 0;
            16    char fsm[7][256];
            17
            18    FILE *pfin ;
            19    if ((pfin = fopen("sweep-comments.txt","r")) == NULL)
            20    {
            21        printf("can not open the file");
            22        exit(0);
            23    }

            24
            25    #ifdef SCREEN
            26        #define OUT stdout
            27    #else
            28        FILE *pfout;
            29        pfout = fopen("result.txt","w");
            30        #define OUT pfout
            31    #endif
            32
            33    initialize_fsm(fsm);
            34
            35    #pragma region FSM ///嘗試#pragma region功能. Visual C++ 2005
            36
            37    while ((ch = fgetc(pfin)) != EOF)
            38    {
            39        state = fsm[state][ch];
            40
            41        if ( state != 2  && ch !='*' && temp == '/')
            42            fputc(temp,OUT);
            43
            44        temp = ch;
            45
            46        switch(state)
            47        {
            48            /*0,5,6執(zhí)行同一個動作*/
            49            case 5:
            50            case 6:
            51            case 0:
            52                    fputc(ch,OUT);
            53                    break;
            54            case 7:
            55                    state = 0;
            56                    break;
            57        }

            58
            59        if(state != 1)
            60            temp=0;
            61    }

            62    #pragma endregion
            63}

            64
            65void initialize_fsm(char fsm[7][256])
            66{
            67    int lenth = sizeof(char)*256;
            68
            69    memset(fsm[0],0,lenth);
            70    memset(fsm[1],0,lenth);
            71    memset(fsm[2],2,lenth);
            72    memset(fsm[3],3,lenth);
            73    memset(fsm[4],3,lenth);
            74    memset(fsm[5],5,lenth);
            75    memset(fsm[6],5,lenth);
            76
            77    fsm[0]['"'= 5;
            78    fsm[0]['/'= 1;
            79    fsm[1]['/'= 2;
            80    fsm[1]['*'= 3;
            81    fsm[2]['\n'= 0;
            82    fsm[3]['*'= 4;
            83    fsm[4]['/'= 7;
            84    fsm[5]['\\'= 6;
            85    fsm[5]['"'= 0;
            86}

            87

            代碼2
             1%{
             2/*
             3*用lex實現(xiàn)清除代碼注釋
             4*/

             5void comment(int style);
             6void string_constant();
             7const int singalline =0, multiline =1;
             8
             9%}

            10
            11
            12%%
            13
            14"/*"        {comment(multiline );}
            15"//"        {comment(singalline);}
            16"\""        {string_constant();}
            17.|\n        {fprintf(yyout,"%c",*yytext);} 
            18
            19%%
            20
            21int main(int argc,char *argv[])
            22{
            23    FILE *pfin ,*pfout;
            24    if ((pfin = fopen (argv[1],"r")) ==NULL)
            25    {
            26        printf("can not open the file\n");
            27        exit (1);
            28    }

            29    pfout = fopen("output.txt","w");
            30    
            31    yyin = pfin;
            32    yyout = pfout;
            33    
            34    yylex();
            35
            36    return 0;
            37}

            38
            39void string_constant()
            40{
            41    int ch ;
            42
            43    fprintf(yyout,"%c",*yytext);
            44
            45    while ( (ch = input()) != EOF)
            46    {
            47        if (ch == '\\')
            48        {
            49            fprintf(yyout,"%c",ch);
            50            ch = input();
            51            fprintf(yyout,"%c",ch);
            52            
            53            continue;
            54        }

            55
            56        if (ch == '\"')
            57        {
            58            fprintf(yyout,"%c",ch);
            59            break;
            60        }

            61        
            62        fprintf(yyout,"%c",ch);
            63    }

            64}

            65
            66void comment(int style)
            67{
            68    int ch , prev=0;
            69    if (style == multiline)
            70    {
            71        while ( (ch = input()) != EOF )
            72        {
            73            if (prev == '*' && ch == '/')
            74                return ;
            75
            76            prev = ch;
            77        }

            78        
            79        return ;
            80    }

            81    else
            82    {
            83        while ( (ch = input()) != EOF )
            84        {
            85            if (ch == '\n')
            86            {
            87                fprintf(yyout,"%c",'\n');
            88                return ;
            89            }

            90        }

            91    }

            92}

            93int yywrap()
            94{
            95        return 1;
            96}

            97
            posted on 2009-05-07 14:21 zhaoyg 閱讀(662) 評論(0)  編輯 收藏 引用 所屬分類: 小代碼
            9久久9久久精品| 91麻豆国产精品91久久久| 久久精品国产免费一区| 成人精品一区二区久久久| 久久午夜福利无码1000合集| 久久综合狠狠综合久久综合88| 欧美777精品久久久久网| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久久久久亚洲精品不卡 | 四虎亚洲国产成人久久精品| 久久成人国产精品| 武侠古典久久婷婷狼人伊人| 丰满少妇人妻久久久久久4| 人妻丰满AV无码久久不卡 | 久久久国产一区二区三区| 99久久人妻无码精品系列| 国产精品99久久久久久宅男小说| 国产成人精品久久二区二区| 久久狠狠爱亚洲综合影院| 亚洲а∨天堂久久精品| 四虎国产永久免费久久| 国产情侣久久久久aⅴ免费| 伊人久久大香线蕉av一区| 午夜精品久久久久9999高清| 久久久久亚洲AV成人网人人软件| 久久午夜电影网| 欧美日韩中文字幕久久伊人| 国产精品美女久久久久久2018| 性做久久久久久久| 亚洲AV成人无码久久精品老人| 99蜜桃臀久久久欧美精品网站| 亚洲七七久久精品中文国产| 亚洲国产成人精品久久久国产成人一区二区三区综 | 99久久婷婷国产综合亚洲| 久久人妻少妇嫩草AV无码专区| 18岁日韩内射颜射午夜久久成人| 久久久久久久免费视频| 国产成人无码精品久久久性色| 精品久久久中文字幕人妻| 久久精品水蜜桃av综合天堂| 久久91精品国产91久久户|