前言
因為Compiler作業需要用到Lex,Lex屬Unix、Linux下的程式,所以使用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下執行。
如果有錯誤訊息,把錯誤那行註解掉應該就行了。
留言列表