解析器準(zhǔn)備
額,SQL發(fā)展到今天已經(jīng)是非常龐大的體系,要想將它完全實(shí)現(xiàn)已經(jīng)不可能,即使是商業(yè)數(shù)據(jù)庫中也是大部分的實(shí)現(xiàn)。
對(duì)于如此復(fù)雜的語言,從頭開始字符的解析程序開發(fā),已經(jīng)沒有意義,也與數(shù)據(jù)庫內(nèi)核的內(nèi)容不符,所以在SQL解析模塊中引入兩個(gè)成熟的工具flex和bison,它們是業(yè)界著名的語言解析工具,在編譯器,數(shù)據(jù)庫等各領(lǐng)域的前端語言分析中應(yīng)用廣泛。
1 詞法分析工具flex
Flex起源于1975年由Mike Lesk和Eric Schmidt編寫的lex工具。后來,Lawrence Berkeley實(shí)驗(yàn)室的Vern Paxson將lex用C語言重新實(shí)現(xiàn),并命名為flex,意為“快速詞法分析器生成程序”(Fast Lexical Analyzer Generator)。
Flex是一個(gè)詞法分析器生成器(Lexical Analyzer Generator),用于將輸入文本分割成一個(gè)個(gè)有意義的詞塊,這些詞塊被稱為記號(hào)(Token)。Flex接受一組正則表達(dá)式和對(duì)應(yīng)的動(dòng)作,生成一個(gè)能夠識(shí)別和處理輸入文本中的詞法單元的C程序。
flex 源碼安裝
- 下載地址
- 編譯安裝步驟
下載最新版本,在解壓后的目錄執(zhí)行如下命令進(jìn)行編譯安裝
<pre class="custom" data-tool="markdown.com.cn編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`./autogen.sh
configure && make
sudo make install` </pre>
安裝后進(jìn)行檢查
<pre class="custom" data-tool="markdown.com.cn編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">[senllang@hatch bin]$ flex -V flex 2.6.1 </pre>
2 語法分析工具bison
Bison是一個(gè)語法分析器生成器(Syntax Analyzer Generator),用于確定由Flex生成的記號(hào)是如何彼此關(guān)聯(lián)的。Bison接受一個(gè)上下文無關(guān)文法和對(duì)應(yīng)的動(dòng)作,生成一個(gè)能夠根據(jù)文法規(guī)則分析輸入文本的C程序。它的主要作用是將輸入文本按照語法規(guī)則進(jìn)行解析,并生成相應(yīng)的語法樹或執(zhí)行相應(yīng)的動(dòng)作。
Bison來源于yacc(Yet Another Compiler Compiler),一個(gè)由Stephen C. Johnson于1975年到1978年期間在貝爾實(shí)驗(yàn)室完成的語法分析器生成程序。后來,Bob Corbett在加州伯克利大學(xué)對(duì)yacc進(jìn)行了改進(jìn),并演變成了伯克利yacc。最終,來自自由軟件基金會(huì)(Free Software Foundation)的Richard Stallman改寫了Corbett的版本,并把它用于GNU項(xiàng)目中,演化成為當(dāng)前的Bison。
flex 源碼安裝
下載最新版本,在解壓后的目錄執(zhí)行如下命令進(jìn)行編譯安裝
<pre class="custom" data-tool="markdown.com.cn編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`configure && make
sudo make install` </pre>
安裝后進(jìn)行檢查
<pre class="custom" data-tool="markdown.com.cn編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`[senllang@hatch bin]$ bison -V
bison (GNU Bison) 3.0.4
Written by Robert Corbett and Richard Stallman.
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE` </pre>
windows下環(huán)境
很多人習(xí)慣使用windows操作系統(tǒng),上面兩個(gè)工具也有一個(gè)windows版本,大家可以下載安裝,它是一個(gè)集成包。
總結(jié)
除了以上工具之外,當(dāng)然還需要安全gcc,Makefile等編譯工具, 這里的版本分別為gcc version 8.5.0 20210514 (Red Hat 8.5.0-19) (GCC)和GNU Make 4.2.1。
期待下節(jié)的開始吧,更新內(nèi)容可以在公眾號(hào)搜索手寫數(shù)據(jù)庫關(guān)鍵字。