一即纲、背景
在分析閱讀pg 11的源代碼時(shí)狞换,發(fā)現(xiàn)pg的語法分析模塊使用了Lex&Yacc蒜绽。
pg使用的的Flex & bison——lex & yacc的升級版歧胁。
二滋饲、Flex & bison簡介
Flex和bison是兩個(gè)用來生成程序的工具彤敛,它們生成的程序分別叫做詞法分析器和語法分析器,postgresql主要是用來生成SQL語句的詞法和語法分析器了赌。
三墨榄、Flex & bison 的工作流程
任何一種語言,都是有一定的語法規(guī)則的勿她,不管是人類的語言袄秩,還是計(jì)算機(jī)語言(如C/C++編程語言等),因此逢并,可以利用這些已知的規(guī)則之剧,來對相應(yīng)的語言進(jìn)行分析。
例如漢語中的一個(gè)句子砍聊,基本的格式是:主(名詞/代詞)+謂(動詞)+賓(名詞/代詞)背稼,當(dāng)你在說一句話的時(shí)候,我們把你說的話(輸入)先拆分成一個(gè)個(gè)有意義的字或者詞組玻蝌,然后對照該語法蟹肘,看詞性及組合,是否符合既定的語法規(guī)范俯树,如果符合帘腹,則可以知道你說的話是符合規(guī)范的。
比如许饿,你說“我吃飯”阳欲,輸入會被依次拆成:“我”、“吃”陋率、“飯”
它們分別是代詞球化、動詞、名詞瓦糟,因此符合上面的語法規(guī)則筒愚,因此這句話是OK的。而如果說“我飯吃”狸页,則會發(fā)現(xiàn)與上面的規(guī)范不符合(也沒有其他符合的規(guī)范)锨能,因此這句話語法上是有問題的。
Flex和bison生成的詞法和語法分析器就是干這兩件事的:
1. Flex生成的詞法分析器將輸入拆分成一個(gè)個(gè)記號(token)芍耘;
2. bison生成的語法分析器根據(jù)已有的規(guī)則,分析這些token的組合熄阻,是否符合語法規(guī)范斋竞。
四、總結(jié)
本文主要介紹了Lex & Yacc 的用途和工作流程秃殉。