溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么理解PostgreSQL語法分析中的上下文無關(guān)語法

發(fā)布時間:2021-11-09 14:28:59 來源:億速云 閱讀:118 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

本篇內(nèi)容介紹了“怎么理解PostgreSQL語法分析中的上下文無關(guān)語法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、上下文無關(guān)語法

基本概念
下面是來自維基百科的解釋

上下文無關(guān)文法(語法)(英語:context-free grammar,縮寫為CFG),在計算機(jī)科學(xué)中,若一個形式文法 G = (N, Σ, P, S) 的產(chǎn)生式規(guī)則都取如下的形式:V -> w,則謂之。其中 V∈N ,w∈(N∪Σ)* 。上下文無關(guān)文法取名為“上下文無關(guān)”的原因就是因為字符 V 總可以被字串 w 自由替換,而無需考慮字符 V 出現(xiàn)的上下文。一個形式語言是上下文無關(guān)的,如果它是由上下文無關(guān)文法生成的(條目上下文無關(guān)語言)。
上下文無關(guān)文法重要的原因在于它們擁有足夠強(qiáng)的表達(dá)力來表示大多數(shù)程序設(shè)計語言(包括SQL)的語法;實際上,幾乎所有程序設(shè)計語言都是通過上下文無關(guān)文法來定義的。另一方面,上下文無關(guān)文法又足夠簡單,使得我們可以構(gòu)造有效的分析算法來檢驗一個給定字串是否是由某個上下文無關(guān)文法產(chǎn)生的。BNF(巴克斯-諾爾范式)經(jīng)常用來表達(dá)上下文無關(guān)文法。

形式定義

上下文無關(guān)文法 G 是 4-元組:
G = ( V , Σ , R , S ) 這里的

  1. V 是“非終結(jié)”符號或變量的有限集合。它們表示在句子中不同類型的短語或子句。

  2. Σ 是“終結(jié)符”的有限集合,無交集于 V,它們構(gòu)成了句子的實際內(nèi)容。

  3. S 是開始變量,用來表示整個句子(或程序)。它必須是 V 的元素。

  4. R 是從 V 到 (V∪Σ)?的關(guān)系,使得?w∈(V∪Σ)?:(S,w)∈R。
    此外, R是有限集合。 R 的成員叫做語法的“規(guī)則”或“產(chǎn)生式”。星號表示Kleene星號運算。


示例
比如我們可以定義一種簡單查詢語句,其上下文無關(guān)語法:
簡單查詢語句 = ( 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

按此上下文無關(guān)語法,可以得到該簡單查詢語句的一些樣例語句:
select a1,b2,aaacbdre from t1,t2 where c1 = ‘a(chǎn)xx1’
select c1,c2,xx from e1,t2xx where c1 = ‘’

“怎么理解PostgreSQL語法分析中的上下文無關(guān)語法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI