【手寫數(shù)據(jù)庫內(nèi)核系列】03 SQL解析工具準(zhǔn)備

解析器準(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 源碼安裝

  • 下載地址

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 源碼安裝

bison 下載地址

下載最新版本,在解壓后的目錄執(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è)集成包。

winflexbison

總結(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)鍵字。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Flex 與 Bison 是為編譯器和解釋器的編程人員特別設(shè)計(jì)的工具: Flex 用于詞法分析(lexical a...
    GoCodingInMyWay閱讀 1,067評(píng)論 0 0
  • 一般詞法分析器和語法分析器會(huì)一起使用,語法分析器會(huì)調(diào)用詞法分析器來讀取輸入,詞法分析器匹配到特定的模式后,就向語法...
    北山學(xué)者閱讀 2,400評(píng)論 1 2
  • 一、Ubuntu安裝flex 在ubutu上安裝 yacc的命令: sudo apt-get install fl...
    Minority閱讀 10,582評(píng)論 0 3
  • 引子 最近閑暇之余讀了一本書,名字叫做《Flex與Bison中文版》,收獲頗豐,在此記錄。寫程序已經(jīng)將近7年多了,...
    Erich_Godsen閱讀 1,685評(píng)論 0 2
  • FLEX 什么是FLEX?它是一個(gè)自動(dòng)化工具,可以按照定義好的規(guī)則自動(dòng)生成一個(gè)C函數(shù)yylex(),也成為掃描器(...
    我是酸菜魚閱讀 4,971評(píng)論 2 2

友情鏈接更多精彩內(nèi)容