close

前言

因為Compiler作業需要用到LexLexUnixLinux下的程式,所以使用Cygwin模擬Unix

網路上很少這部份的資料,所以在此筆記安裝過程。

步驟

@ 第一步

首先,先安裝Cygwin

可從官網找載點http://www.cygwin.com/

 安裝基本上都腦殘下一步,但有一步很重要,就是"Cygwin安裝選項->Devel改成Install"

請參考http://aiplab.net/blog/?tag=cygwin


@ 第二步

第一步完成後,就有Lex可以用了,先測試Lex能不能正常執行吧

先到以下網頁複製範例 http://www.epaperpress.com/lexandyacc/

以下為我複製的範例

------------------------------------------------------------

%{
    int nchar, nword, nline;
%}
%%
\n         { nline++; nchar++; }
[^ \t\n]+  { nword++, nchar += yyleng; }
.          { nchar++; }
%%
int main(void) {
    yylex();
    printf("%d\t%d\t%d\n", nchar, nword, nline);
    return 0;
}

--------------------------------------------------------------

另存成 檔名.l (之後用到以 xxx.l 代替) 放在Cygwin user 資料夾下,(通常為 C:/cygwin/home/User)

執行 Cygwin

輸入以下指令

--------------------------

flex xxx.l

gcc lex.yy.c -ll

--------------------------

如果沒有錯誤就會產生a.exe的執行檔,這代表完成啦

但是如果有 "cannot find -ll" 請參考以下網頁

http://www.justlinux.com/forum/archive/index.php/t-132040.html

要執行a.exe就打以下指令

-----------------------

./a.exe

-----------------------

如果要吃input file就打以下指令

--------------------------------

./a.exe < input.txt

---------------------------------


以下略... 筆者懶...


結論

其實Lex是一個幫助產生詞彙分析程式的工具,可以將我們定義的規則轉成程式,我們用這個程式分析我們的資料。

就用以上的指令來說明:

將我們定義的規則寫進 xxx.l 檔裡

flex 檔名.l 利用Lex將我們定義的規則轉成程式(lex.yy.c)

gcc lex.yy.c -ll 編譯這個程式變成執行檔(a.exe)

./a.exe ← 執行這個分析程式的執行檔分析我們輸入的資料
or
./a.exe < input.txt

 

參考

如果想寫token規則,以下網頁值得參考

http://www.epaperpress.com/lexandyacc/


補充

經過flex xxx.l步驟後產生的lex.yy.c檔,用DevC++或者Windows下的Compiler編譯,

產生的程式就可以在Windows下執行。

如果有錯誤訊息,把錯誤那行註解掉應該就行了。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 GiMi 的頭像
    GiMi

    I'm GiMi

    GiMi 發表在 痞客邦 留言(3) 人氣()