本篇內(nèi)容介紹了“怎么理解PostgreSQL語法分析中的上下文無關語法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
10年的富源網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整富源建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“富源網(wǎng)站設計”,“富源網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
基本概念
下面是來自維基百科的解釋
上下文無關文法(語法)(英語:context-free grammar,縮寫為CFG),在計算機科學中,若一個形式文法 G = (N, Σ, P, S) 的產(chǎn)生式規(guī)則都取如下的形式:V -> w,則謂之。其中 V∈N ,w∈(N∪Σ)* 。上下文無關文法取名為“上下文無關”的原因就是因為字符 V 總可以被字串 w 自由替換,而無需考慮字符 V 出現(xiàn)的上下文。一個形式語言是上下文無關的,如果它是由上下文無關文法生成的(條目上下文無關語言)。
上下文無關文法重要的原因在于它們擁有足夠強的表達力來表示大多數(shù)程序設計語言(包括SQL)的語法;實際上,幾乎所有程序設計語言都是通過上下文無關文法來定義的。另一方面,上下文無關文法又足夠簡單,使得我們可以構造有效的分析算法來檢驗一個給定字串是否是由某個上下文無關文法產(chǎn)生的。BNF(巴克斯-諾爾范式)經(jīng)常用來表達上下文無關文法。
形式定義
上下文無關文法 G 是 4-元組:
G = ( V , Σ , R , S ) 這里的
V 是“非終結”符號或變量的有限集合。它們表示在句子中不同類型的短語或子句。
Σ 是“終結符”的有限集合,無交集于 V,它們構成了句子的實際內(nèi)容。
S 是開始變量,用來表示整個句子(或程序)。它必須是 V 的元素。
R 是從 V 到 (V∪Σ)?的關系,使得?w∈(V∪Σ)?:(S,w)∈R。
此外, R是有限集合。 R 的成員叫做語法的“規(guī)則”或“產(chǎn)生式”。星號表示Kleene星號運算。
示例
比如我們可以定義一種簡單查詢語句,其上下文無關語法:
簡單查詢語句 = ( V , Σ , R , S )
其中:
V = {QUERY,STMT_SELECT,STMT_FROM,STMT_WHERE,OBJECT,VAR,EXPR}
S = {QUERY}
Σ = {select,from,where,[a-z][a-z0-9]+,[a-z][a-z0-9]*,’}
R :
QUERY -> STMT_SELECT STMT_FROM STMT_WHERE
OBJECT -> [a-z][a-z0-9]+
VAR -> [‘[a-z][a-z0-9]*‘]
EXPR -> OBJECT = VAR
STMT_SELECT -> select OBJECT[,OBJECT]*
STMT_FROM -> from OBJECT[,OBJECT]*
STMT_WHERE -> where EXPR
按此上下文無關語法,可以得到該簡單查詢語句的一些樣例語句:
select a1,b2,aaacbdre from t1,t2 where c1 = ‘a(chǎn)xx1’
select c1,c2,xx from e1,t2xx where c1 = ‘’
“怎么理解PostgreSQL語法分析中的上下文無關語法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!