亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 使用lex分析java源程序.txt

?? Lex是美國Bell實驗室用C語言研制的一個詞法分析程序自生成工具。它的基本原理就是使用正則表達式掃描匹配文本
?? TXT
字號:
使用lex分析java源程序

    一般編譯程序在進行詞法分析的過程中都要將源程序中的無用符號及注釋刪除。雖然這個步驟并不復雜,用c語言就可以直接實現,但是如果用詞法分析程序生成工具lex實現起來卻可以更加方便。

       Lex是美國Bell實驗室用C語言研制的一個詞法分析程序自生成工具

。它的基本原理就是使用正則表達式掃描匹配文本,并為每一個匹配模式定義一些操作,當用C語言作宿主語言時,這些操作都由C語言實現。

一種匹配的正則表達式可能會包含相關的動作。這一動作可能還包括返回一個標記。當 Lex 接收到文件或文本形式的輸入時,它試圖將文本與正則表達式進行匹配。它一次讀入一個輸入字符,直到找到一個匹配的模式。如果能夠找到一個匹配的模式,Lex 就執行相關的動作(可能包括返回一個標記)。另一方面,如果沒有可以匹配的正則表達式,將會停止進一步的處理,Lex 將顯示一個錯誤消息。

Lex 和 C 是強耦合的。一個 .l 文件(Lex 文件具有 .l 的擴展名)通過 lex 公用程序來傳遞,并生成 C 的輸出文件。這些文件被編譯為詞法分析器的可執行版本。

本程序對java源程序進行分析,主要實現以下兩個功能:

(1)、清除注釋。java源程序有三種注釋方法:1、單行注釋,以//開頭直到行結束;2、多行注釋,以/*為開始,*/為結束,可以注釋多行;3、java文檔注釋,這也是一種多行注釋,但它可以通過java文檔生成工具寫入java程序文檔中。它以/**為開始,*/為結束。

(2)、通過程序行數計算工作量。

(3)、計算程序中類的個數,并判斷有沒有兩個public類,如果存在則報錯:There is an error:One java file cannot includes two public class。

單行注釋的清除。由于單行注釋以//開頭直到行結束,首先要匹配的就是//,然后清除從匹配處到行結束的所有字符。具體實現如下:

"//" {

      int c;

      while ( (c = input()) != '\n' &&

         c != EOF )

      {

         ;

      }

      code = add(code,'\n');

   }

 

多行注釋的清除。多行注釋有兩種,一種是普通多行注釋,另一種是java文檔注釋。這兩種注釋都以*/結束,普通多行注釋以/*開始,java文檔注釋以/**開始。可以先匹配/*,然后向后搜索*/。要區別這兩種注釋就要看/*后面是否緊跟一個*字符,如果不是則為普通多行注釋;如果是還要看下一字符是否為/字符,如果是也為普通注釋,如果不是則為java文檔注釋。具體lex程序實現如下:

"/*" {

        int c,ct=0;

        char * javadoc = "/*there is a Java Doc Comment*/";

        for ( ; ; )

       {

           while ( (c = input()) != '*' &&

              c != EOF )

           {

              ct++;

           }

           

           if ( c == '*' )

           {

              c = input();

              if ( c == '/' )

              {

                  ct = 0;

                  break;    /* found the end */

              }

              else

              {

                  if(ct==0)

                      code = strcat(code,javadoc);

              }

           }

           

           if ( c == EOF )

           {

               printf( "EOF in comment" );

               break;

           }

       }

    }

 

my.l即為lex程序。輸入一段帶有注釋的java源程序,然后打入結束標志$號,回車就可以看到在輸出的程序中所有注釋都已經刪除,在含有java文檔注釋的地方加上了一句注釋:/*there is a Java Doc Comment*/。

經過仔細研究發現,上面的實現過程還是過分依賴C語言,沒有真正發揮Lex模式匹配的強大功能。單行注釋、普通多行注釋、Java文檔注釋可分別由下列模式匹配:

\/\/.*\n

\/\*[^\*\/]*\*\/

\/\*\*[^\*\/]*\*\/

本程序還提供了識別類定義的功能,匹配模式如下:

public[ \n\t]+class[ \n\t]+[a-zA-Z][_a-zA-z0-9]*/[ \n\t]*\{[^\]}*\}

(public|protected|private)[ \n\t]+class[ \n\t]+[a-zA-Z][_a-zA-z0-9]*/[ \n\t]*\{[^\]}*\}

[ \n\t]*class[ \n\t]+[a-zA-Z][_a-zA-z0-9]*/[ \n\t]*\{[^\]}*\}

 

經完善后的lex程序如下所示:

%{

#include <string.h>

char * code = "";

int codelines = 0;

int classnum = 0;

int pubclass = 0;

char * classes[4]={"","","",""};

/*add a char c to the string code*/

char * add(char * code,char c)

{

    char * temp;

    if(code==NULL)

        return "";

    temp = (char*)malloc(sizeof(char)*2);

    temp[0] = c;

    temp[1] = '\0';

    temp = strcat(code,temp);

    return temp;

}

 

%}

%%

\/\*[^\*\/]*\*\/ code = add(code,'');

\/\*\*[^\*\/]*\*\/ code = strcat(code,"/*there is a Java Doc Comment*/\n");

\/\/.*\n code = add(code,'\n');

 

public[ \n\t]+class[ \n\t]+[a-zA-Z][_a-zA-z0-9]*/[ \n\t]*\{[^\}]*\} {

        classes[classnum] = (char*)malloc(100);

        classes[classnum] = strcpy(classes[classnum],yytext);

        classnum++;

        code = strcat(code,yytext);

        pubclass++;

    }

 

(public|protected|private)[ \n\t]+class[ \n\t]+[a-zA-Z][_a-zA-z0-9]*/[ \n\t]*\{[^\}]*\} {

        classes[classnum] = (char*)malloc(100);

        classes[classnum] = strcpy(classes[classnum],yytext);

        classnum++;

        code = strcat(code,yytext);

    }

 

[ \n\t]*class[ \n\t]+[a-zA-Z][_a-zA-z0-9]*/[ \n\t]*\{[^\}]*\} {

        classes[classnum] = (char*)malloc(100);

        classes[classnum] = strcpy(classes[classnum],yytext);

        classnum++;

        code = strcat(code,yytext);

    }

 

\n  code = add(code,'\n');

. {

        if(yytext[0] == ';')

           codelines++;

        code = add(code,yytext[0]);

    }

%%

 

yywrap()

{

    int i=0;

    printf("\nBelow is the code without comment:\n\n");

    printf(code);

    printf("\n\nConclude:\nThis code weights %d lines\n",codelines);

    printf("This code includes %d classes\n",classnum);

    printf("classes:\n");

    for(i=0;i<classnum;i++)

    {

        printf(classes[i]);

        printf("\n");

    }

    if(pubclass>1)

        printf("\nThere is an error: a java file cannot have two public class\n");

    code = (char*)malloc(1);

    code[0]='\0';

}

 

main()

{

    yylex();

    system("pause");

    return 1;

}

這個程序還有另外兩個其他功能:1、根據程序的行數來確定程序工作量,行數等于分號的個數。在結果的末尾將會顯示行數;2、我們知道一個java文件中不能存在兩個public類,本程序可以檢查一個文件中存在幾個類,并判斷是否存在兩個或兩個以上的public類,如果存在就報錯。

注:my.l文件是改進前的lex程序,改進后的程序保存在my1.l文件中,Java.txt內含有一個java源程序可以用來測試。運行lexyy.exe,復制java.txt里面的內容粘貼到程序里,加上輸入結束符Ctrl+z,然后回車即可看到結果;或者在dos下把java.txt作為lexyy.exe的參數運行lexyy.exe也可。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲精品一区二区三区| 91久久精品一区二区| 亚洲h动漫在线| 亚洲成人资源在线| 亚洲一区二区三区在线播放| 伊人一区二区三区| 亚洲一区自拍偷拍| 图片区小说区国产精品视频| 午夜激情综合网| 日本不卡的三区四区五区| 日本亚洲免费观看| 激情小说亚洲一区| 成人性生交大片免费看视频在线| 国产激情一区二区三区桃花岛亚洲| 国产91精品一区二区麻豆亚洲| av一二三不卡影片| 欧美亚洲高清一区| 日韩久久久精品| 日本一区二区视频在线| 亚洲欧美色综合| 婷婷国产在线综合| 国产河南妇女毛片精品久久久 | 国产亚洲精品aa| 国产日韩精品一区二区浪潮av| 中文字幕不卡三区| 亚洲最大色网站| 亚洲无人区一区| 日韩电影在线观看网站| 国产一区二区三区四| 国产福利91精品一区| av一区二区三区四区| 欧美日韩三级视频| 久久久久久久久久久久久夜| 国产精品电影一区二区| 无吗不卡中文字幕| 99久久久精品免费观看国产蜜| 欧美在线高清视频| 久久精品免费在线观看| 亚洲国产精品综合小说图片区| 久久99精品久久久久久国产越南 | 97久久超碰国产精品电影| 欧美日韩国产免费一区二区 | 国产在线精品一区二区三区不卡| av一区二区不卡| 久久视频一区二区| 亚洲18女电影在线观看| 国产精品一区二区在线观看不卡| 欧美日韩大陆一区二区| 亚洲欧美在线观看| 国产成a人亚洲| 日韩欧美一区中文| 亚洲影视在线播放| 91丨porny丨最新| 欧美激情综合在线| 精品一区二区三区欧美| 欧美日韩一区三区| 亚洲精品日韩综合观看成人91| 激情五月婷婷综合网| 欧美一区二区三区性视频| 亚洲另类在线视频| 99久久综合精品| 欧美激情中文字幕一区二区| 韩国精品免费视频| 日韩免费看的电影| 免费在线欧美视频| 欧美精三区欧美精三区| 亚洲国产综合人成综合网站| 色婷婷综合久久久中文一区二区| 中文字幕乱码亚洲精品一区| 国产一区二区剧情av在线| 精品久久国产老人久久综合| 日韩av高清在线观看| 欧美一区二区美女| 美女网站色91| 欧美videos中文字幕| 日韩中文字幕区一区有砖一区| 在线影院国内精品| 一区二区三区中文字幕| 欧美日韩黄色一区二区| 国产精品1区2区| 国产拍揄自揄精品视频麻豆| 国产精品一区二区在线播放| 国产视频911| 不卡av在线免费观看| 自拍偷拍欧美精品| 在线观看91精品国产入口| 亚洲欧美日韩系列| 欧美亚洲国产一区在线观看网站| 亚洲一区视频在线| 欧美美女bb生活片| 天天色天天爱天天射综合| 666欧美在线视频| 狠狠狠色丁香婷婷综合激情 | 精品一区二区三区影院在线午夜| 久久久亚洲国产美女国产盗摄| 国内精品第一页| 国产欧美一区二区在线观看| 91在线观看高清| 亚洲国产日韩综合久久精品| 日韩亚洲欧美一区| 成人99免费视频| 亚洲国产精品一区二区久久| 日韩精品一区在线| a美女胸又www黄视频久久| 午夜精品一区二区三区电影天堂 | 欧美激情在线看| 一级中文字幕一区二区| 99re成人精品视频| 日韩成人精品在线观看| 日本一区二区免费在线观看视频| av中文一区二区三区| 日韩激情视频网站| 国产精品久久久久久福利一牛影视| 一区二区欧美在线观看| 久久久久久久一区| 在线看国产一区二区| 精品一二线国产| 一二三区精品视频| 国产拍揄自揄精品视频麻豆| 欧美日本视频在线| 99久久精品久久久久久清纯| 免费一级欧美片在线观看| 中文字幕中文字幕一区二区| 日韩精品一区二区三区老鸭窝| 99国产精品一区| 国产精品影视在线观看| 日日夜夜免费精品| 亚洲欧美偷拍三级| 国产欧美一区二区精品婷婷| 日韩一级黄色片| 欧美午夜免费电影| 一本大道久久a久久综合婷婷| 精品一区二区免费在线观看| 日韩和的一区二区| 亚洲制服欧美中文字幕中文字幕| 欧美高清在线精品一区| 精品电影一区二区| 91精品黄色片免费大全| 91精品1区2区| 91久久精品一区二区| 91尤物视频在线观看| 成人av电影在线网| 成人97人人超碰人人99| 懂色av一区二区三区免费观看| 日本不卡不码高清免费观看| 三级亚洲高清视频| 日韩av一级电影| 免费的成人av| 久久不见久久见免费视频1| 天天综合色天天| 午夜精品久久久久| 日产欧产美韩系列久久99| 亚洲444eee在线观看| 五月天久久比比资源色| 青娱乐精品视频在线| 日本三级韩国三级欧美三级| 日本人妖一区二区| 久久99久久99小草精品免视看| 日本vs亚洲vs韩国一区三区二区 | 欧美成人欧美edvon| 这里只有精品电影| 精品日韩一区二区三区免费视频| 欧美电影免费提供在线观看| 久久一区二区视频| 国产精品入口麻豆九色| 日韩码欧中文字| 亚洲午夜视频在线| 美女脱光内衣内裤视频久久网站| 国产综合成人久久大片91| 国产高清在线精品| 在线免费观看成人短视频| 欧美日韩夫妻久久| 精品国产污网站| 中文字幕一区二区视频| 亚洲成a人片在线观看中文| 蜜桃av噜噜一区| av成人动漫在线观看| 在线视频观看一区| 欧美电影免费观看高清完整版在线| 国产欧美日韩亚州综合| 亚洲一线二线三线视频| 狠狠色丁香婷综合久久| 一本大道久久a久久精品综合| 欧美人成免费网站| 国产精品视频第一区| 亚洲mv大片欧洲mv大片精品| 国产河南妇女毛片精品久久久| 欧美性videosxxxxx| 国产丝袜欧美中文另类| 一区二区三区久久久| 另类的小说在线视频另类成人小视频在线| 国产乱国产乱300精品| 欧美色网站导航| 中文字幕免费观看一区| 蜜臀精品一区二区三区在线观看 | 亚洲已满18点击进入久久| 蜜桃在线一区二区三区| 色视频一区二区| 日本一区二区三区视频视频| 日韩不卡在线观看日韩不卡视频|