在Windows平台使用flex和tcc進行編譯原理-詞法分析的實驗環境搭建

來源:互聯網
上載者:User

昨天發了篇《Windows平台flex+gcc詞法分析實驗工具包》,可能是被部落格園團隊認為是廣告或者軟體發布給撤下了首頁,很傷心啊,畢竟自己是花了一些功夫才整理出這些東西的。這篇文章將避免出現上述問題的嫌疑,所以不再提供下載了,詳細講講怎麼自己動手完成實驗環境的搭建。另外,使用tcc代替gcc,主要是因為從網上獲得的那個gcc程式,是從dev-cpp中提取的,而提取的人做的不完善,竟然沒有給出string.h標頭檔,這可是c語言標準庫函數的標頭檔,而且做詞法分析,和檔案和字串打交道,一些字串操作函數是很容易就要用到的。我也試圖從dev-cpp中提取出string.h和對應的.a、.o庫檔案,但是可能是dev-cpp編譯版本不對應的原因,沒有找到匹配的相關檔案,暫時放棄了。又試圖找個獨立實現的string.h+string.cpp,但是沒有如願,也暫時放棄了。後來,發現有人提到了另一款c語言編譯器Tiny C Compiler(TCC),果斷下了下來。這個c編譯器確實tiny,我下載了Windows下的binary安裝包,解壓後(不用安裝直接可用)連帶doc和examples一共只有900多kb!實驗了下自己在mingw+gcc+flex下測試通過的代碼,編譯通過,程式運行正確。所以,tcc可以作為之前提到的gcc的替代。下面簡單說明一下,搭建flex+tcc做詞法分析實驗的環境,其實非常簡單。

首先要下載我們要使用到的工具。有兩個,一個是flex,Windows平台上可用版本是http://gnuwin32.sourceforge.net/packages/flex.htm;另一個是tcc,地址是http://bellard.org/tcc/,建議選擇Windows binary distribution對應的檔案下載。flex是個exe的安裝程式,這個程式其實應該只是做瞭解壓的事;tcc下載得到一個壓縮包,解壓到合適的目錄,建議解壓後目錄層次是這樣的:

這樣基本上就可以了。flex和tcc都是命令列工具,為了以後使用的方便,不必經常切換目錄,可以把flex和tcc所在的目錄 \flex\bin 和 \tcc加入到環境變數path中,當然,和我前一篇文章中的做法一樣,可以寫一個start.bat的批處理,這樣做的好處是用bat添加的path只有在當前進程有效,實際上沒有修改環境變數path,path太多看著也不舒服,下面是start.bat的原始碼,用notepad儲存為start.bat(注意拓展名)下來,存到圖上flex_tcc的目錄下即可:

@echo off
path = %path%;%cd%\flex\bin;%cd%\tcc;
cmd /k cls

這樣雙擊之後,會啟動一個命令列,輸入path,會發現最後面帶上了 \flex\bin 和 \tcc兩個目錄。輸入flex --version,會顯示當前的flex的版本,同樣tcc -version會顯示當前tcc的版本。這兩個命令有效,也就是說flex和tcc可用了。之後,找一段代碼來測試,下面給一段自己寫的代碼:

%{#include <stdio.h>#include <string.h>#include <stdlib.h>FILE *fout1;   void ttype(char* type,char* text,FILE *stream){fputs("(",stream);fputs(type,stream);fputs(",",stream);fputs(text,stream);fputs(")\n",stream);}%}digit          [0-9]number         {digit}+letter         [a-zA-Z]identifier     {letter}({digit}|{letter}|_)*%%{identifier}   {ttype("ident",yytext,fout1);}{number}       {ttype("num",yytext,fout1);}.              {/*未匹配的字元,不作處理*/}%%int main(){if((fout1=fopen("output.txt","w"))==NULL){printf("can not create the file.\n");exit(0);}yylex();fclose(fout1);return 0;}int yywrap(){return 1;}

用notepad把代碼儲存為sample.l(標準拓展名是.l,不過貌似flex是不管的),放到flex_tcc目錄下。下面進行產生和編譯,
雙擊start.bat,在命令列視窗輸入flex sample.l ,這時flex_tcc目錄下產生一個lex.yy.c的檔案;接著輸入 tcc lex.yy.c,這時產生了一個lex.yy.exe的可執行檔。

這樣產生和編譯就完成了,接下來來測試一下這程式,隨機輸入一些單詞和數字,按Ctrl+Z結束輸入。這時flex_tcc目錄下會產生一個output.txt的文字檔,內容是對剛才輸入的單詞和數位判斷。

這樣我們就完成了使用flex和tcc搭建Windows平台上進行詞法分析實驗的環境。

後記:編譯原理課的第一次實驗作業是詞法分析,助教老師布置的作業難度不算太大,只是要用linux系統,本人不排斥linux,但是電腦太破,禁不起虛擬機器、雙系統等方案的折騰,只好在Windows上找替代方案,目前這個是我感覺最小的方案。另外tcc是一款開源的編譯器,既然在學編譯原理,那麼考慮到合適的時機,開始研究tcc的代碼。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.