《編譯工程》
今天老師講到了關於編譯器工作的第一步:詞法分析。
並介紹了用於詞法分析的工具,其中提到了flex
flex全稱——fast lexical analyzer generator,即快速詞法分析器生成器
flex的輸入要么是文件要么是標准輸入(控制台等)
而其輸入的文件由正則表達式和C代碼的形式組成
flex的輸入文件由三段組成,由兩個%%這樣的符號將文件划分為三部分
定義
%%
規則
%%
用戶代碼(C代碼)
其中,定義分為兩種:一種是變量聲明,另一種是正則表達式聲明
變量聲明使用%{ 要聲明的變量 %},聲明格式與C語言相同
而正則表達式聲明就不需要使用%{%}這個符號,直接定義即可,聲明格式為:表達式名稱:表達式
規則部分:一個規則一行,每行有兩部分構成:
正則表達式 {動作函數}
代碼部分:用戶自定義過程,直接復制到lex.yy.c末尾
那么進入正題,windows下怎么安裝flex呢?
下載網址:http://gnuwin32.sourceforge.net/packages/flex.htm

進入網址后,下載“Complete package,except sources”,點擊“Setup”鏈接即可。
下載完成后,將得到一個exe文件,直接安裝。
全都安裝好以后還要設置一下環境變量Path,即需要將flex的安裝目錄添加到Path中
打開右鍵->我的電腦→屬性→高級系統設置->環境變量->系統變量->Path->編輯->新建->輸入flex的安裝目錄具體到bin目錄下->確定
退出后,打開CMD,輸入flex - V,記住這里的v要大寫。若安裝成功就會顯示flex的版本號
准備flex的輸入文件find.l,給文件的內容為:
%%
[+-]?[0-9]+ { printf("%s\n", yytext); } /* Print integers */
\n {} /* newline */
. {} /* For others, do nothing */
%%
void main(){
yylex();
}
int yywrap(){
return 1;
}
很顯然,這段代碼是用來匹配數字的,打開CMD,切換工作目錄到當前文件下,輸入命令:
flex find.l
將會得到一個lex.yy.c文件,lex.yy.c文件的內容很豐富
而在windows中想要編譯.c文件則需要安裝MinGW編譯器(當然,編譯.c文件不是只有MinGW一種選擇,只是這里使用MinGW編譯器罷了)
該編譯器可直接前往官網下載,同樣下載后需要將編譯器的安裝目錄(需要具體到bin目錄下)添加到Path中
添加完畢后,打開CMD,並切換到lex.yy.c文件的目錄下
gcc lex.yy.c
執行命令后,將會得到a.exe可執行文件
a.exe文件既可以接受標准輸入,也可以接受文件輸入
接受標准輸入:
D:\>a.exe
hgdor-902842
-902842
+889-902
+889
-902
接受文件輸入
D:\>a.exe <number.txt
12345
-1
123
555
+111
456
可以看到編寫的find.l文件確確實實起到了匹配數字的作用
