1.在ubutu上安裝 yacc的命令:html
sudo apt-get install flex bison正則表達式
flex:詞法分析器 sql
flex是一個詞法分析器。用來將一個.l文件生成一個.c程序文件。即生成一個詞法分析器。而後讀取輸入,和正則表達式匹配,再執行相應的動做,實現了程序的功能。函數
咱們能夠發現flex實如今程序外部就能夠接受輸入的功能。flex
bison:語法分析器命令行
根據文法把一系列的記號轉換成一個語法分析樹。3d
把二者聯合使用能夠實現對sql語言的解析。htm
因爲調用這些命令的時候會使用不少命令行語句,即編譯過程複雜的時候,咱們能夠把這些命令行語句寫在一個makefile中。blog
2.首先介紹使用flex的一個例子:get
第一步:首先咱們寫一個.l文件,文件中程序就是做圖。該程序的功能就是計數器,單詞的個數,字符個數,以及行數。
程序中:分爲三個部分。第一部分是%{%}中的部分,用來聲明變量。
第二部分是%% %%中的部分。是指定的匹配規則。形式爲正則表達式 加上 執行動做。其中,正則表達式用來匹配用戶輸入的內容,一旦匹配成功,則執行對應的動做。
第三部分是c語言程序部分。調用flex提供的詞法分析例程yylex()函數。執行,獲得一個c程序。
第二步:在ubutu命令行終端中寫入右圖中命令。
該命令的意思是:經過flex將一個.l文件生成一個lex.yy.c的程序。中間那兩行文字是程序的輸入,2,12,63是程序執行的結果。./a.out是將程序輸出的結果保存在這個文件中。
總結:
3.bison的使用
.y文件中的規則定義部分中。包含兩部份內容:
第一部分:終結符的聲明。在sql語言中就是SELECT FROM WHERE 等這些。
第二部分:定義了語法。即"ADD" 就是表示一個加法。
http://www.cnblogs.com/me115/archive/2010/10/27/1862180.html 這個文章中對文法的講解比較樸素易懂。
4.flex和bison聯合編譯的過程。