如何定義上下文無(wú)關(guān)文法?

2022-09-09 14:02

Context-free grammar是什么?怎樣才叫上下文無(wú)關(guān)呢?
1個(gè)回答
上下文無(wú)關(guān)文法(Content-Free Grammar, CFG)

在計(jì)算機(jī)科學(xué)中,一個(gè)形式文法 G = (N, ∑, P, S) 稱(chēng)之為上下文無(wú)關(guān)的,如果它的產(chǎn)生式規(guī)則都取如下的形式:V -> w ,這里 V∈N ,w∈(N∪∑)* 。上下文無(wú)關(guān)文法取名為“上下文無(wú)關(guān)”的原因就是因?yàn)樽址?V 總可以被字串 w 自由替換,而無(wú)需考慮字符 V 出現(xiàn)的上下文。一個(gè)形式語(yǔ)言是上下文無(wú)關(guān)的,如果它是由上下文無(wú)關(guān)文法生成的(條目上下文無(wú)關(guān)語(yǔ)言)。

上下文無(wú)關(guān)文法重要的原因在于它們擁有足夠強(qiáng)的表達(dá)力來(lái)表示大多數(shù)程序設(shè)計(jì)語(yǔ)言的語(yǔ)法;實(shí)際上,幾乎所有程序設(shè)計(jì)語(yǔ)言都是通過(guò)上下文無(wú)關(guān)文法來(lái)定義的。另一方面,上下文無(wú)關(guān)文法又足夠簡(jiǎn)單,使得我們可以構(gòu)造有效的分析算法來(lái)檢驗(yàn)一個(gè)給定字串是否是由某個(gè)上下文無(wú)關(guān)文法產(chǎn)生的。例子可以參見(jiàn) LR 分析器和 LL 分析器。

BNF (巴克斯-諾爾范式)經(jīng)常用來(lái)表達(dá)上下文無(wú)關(guān)文法。

文法規(guī)則使用相似的表示法。名字用斜體表示(但它是一種不同的字體,所以可與正則表達(dá)式相區(qū)分)。豎線仍表示作為選擇的元符號(hào)。并置也用作一種標(biāo)準(zhǔn)運(yùn)算。但是這里沒(méi)有重復(fù)的元符號(hào)(如正則表達(dá)式中的星號(hào)*),稍后還會(huì)再講到它。表示法中的另一個(gè)差別是現(xiàn)在用箭頭符號(hào)“→”代替了等號(hào)來(lái)表示名字的定義。這是由于現(xiàn)在的名字不能簡(jiǎn)單地由其定義取代,而需要更為復(fù)雜的定義過(guò)程來(lái)表示,這是由定義的遞歸本質(zhì)決定的。

同正則表達(dá)式類(lèi)似,文法規(guī)則是定義在一個(gè)字母表或符號(hào)集之上。在正則表達(dá)式中,這些符號(hào)通常就是字符,而在文法規(guī)則中,符號(hào)通常是表示字符串的記號(hào)。我們利用C中的枚舉類(lèi)型定義了在掃描程序中的記號(hào);為了避免涉及到特定實(shí)現(xiàn)語(yǔ)言(例如C)中表示記號(hào)的細(xì)節(jié),就使用了正則表達(dá)式本身來(lái)表示記號(hào)。此時(shí)的記號(hào)就是一個(gè)固定的符號(hào),如同在保留字 while 中或諸如+或: =這樣的特殊符號(hào)一樣,對(duì)于作為表示多于一個(gè)串的標(biāo)識(shí)符和數(shù)的記號(hào)來(lái)說(shuō),代碼字體為斜體,這就同假設(shè)這個(gè)記號(hào)是正則表達(dá)式的名字(這是它經(jīng)常的表示)一樣。
相關(guān)問(wèn)答
“超級(jí)血色月全食”登場(chǎng)在即 ,月全食是一種什么現(xiàn)象?
3個(gè)回答2023-02-10 13:03
其實(shí)就是太陽(yáng)投射過(guò)來(lái)的光把月球擋住了。所以在地球上看月亮就是一個(gè)圈兒。
趙露思是誰(shuí)旗下的藝人?為什么她會(huì)屢次蹭其他女藝人熱度?
3個(gè)回答2023-02-10 13:03
趙露思是銀河酷娛的藝人,這個(gè)公司還有劉特、漆培鑫等藝人。她總是蹭熱度是因?yàn)橄氡M快提高自己熱度吧,畢竟她蹭熱度的那些藝人都比她紅。
問(wèn)你個(gè)問(wèn)題,一張紙,一個(gè)氣球和一條繩子能做成什么
1個(gè)回答2023-02-10 13:04
我會(huì)把吹脹的氣球擰成一個(gè)人型(無(wú)四肢),再把紙裹在氣球上,做成裙子.然后用繩子在氣球腰間系成蝴蝶結(jié)狀,就像天使的翅膀,取名--守護(hù).
男生明明跟你說(shuō)有點(diǎn)困想睡覺(jué)了,然后我跟他說(shuō)了“晚安”為什么過(guò)了一個(gè)半小時(shí)他又給我發(fā)一個(gè)表情包?
2個(gè)回答2023-02-10 13:04
本來(lái)是來(lái)了睡意的,但腦海里總是想起你,又睡不著了,所以發(fā)個(gè)表情包給你試試,看你睡著了沒(méi)有。
女朋友對(duì)我說(shuō)我想要你的溫柔是什么意思?
1個(gè)回答2023-02-10 13:04
每個(gè)人,在感情開(kāi)始之初,都希望能有個(gè)完美的結(jié)局,希望能夠和自己相愛(ài)的人白頭偕老,但并不是每個(gè)人都能如愿。 可能一開(kāi)始,兩個(gè)人的感情真的很好,畢竟在熱戀期,對(duì)彼此還很新鮮,但隨著時(shí)間的推移,如果不好好...
全文
魔獸世界獵人必刷的聲望
2個(gè)回答2023-02-10 13:04
這位朋友沒(méi)有理解你的意思,作為L(zhǎng)R,必刷的聲望有塞納里奧遠(yuǎn)征隊(duì)聲望,沙城聲望,還有奧爾多或者占星者聲望,為什么只有這3個(gè),肩膀和頭的FM必須要聲望才能買(mǎi)到的,所以塞納里奧遠(yuǎn)征隊(duì)和奧爾多或者占星者必刷,...
全文
一波未平得下半句是什么
1個(gè)回答2023-02-10 13:05
下一句為:一波又起。 釋 義: 一個(gè)浪頭尚未平復(fù),另一個(gè)浪頭又掀起了。比喻事情進(jìn)行波折很多,一個(gè)問(wèn)題還沒(méi)有解決,另一個(gè)問(wèn)題又發(fā)生了。
說(shuō)明文答題方法
2個(gè)回答2023-02-10 13:05
1 概括說(shuō)明對(duì)象及其特征:3 概括說(shuō)明的內(nèi)容: (這個(gè)要靠你自己的閱讀能力了) 2說(shuō)明方法及其作用: 答:列數(shù)字,作比較,下定義,打比方、模狀貌(加描寫(xiě)也對(duì))、做比擬、分類(lèi)別、做詮釋、列圖標(biāo)、...
全文
鐘繇流傳下來(lái)的作品有哪些?
1個(gè)回答2023-02-10 13:05
鐘繇的作品流傳下來(lái)的有《賀捷表》(即《賀克捷表》、《戎路表》)、《薦季直表》、《力命表》、《還示表》,以及王羲之臨寫(xiě)的《尚書(shū)宣示表》、《丙舍帖》等。
維持友情的因素有哪些?
3個(gè)回答2023-02-10 13:05
維持友情肯定是兩個(gè)人興趣相投,而且彼此都很重視。想維持友情就經(jīng)常保持溝通,不要斷了聯(lián)系。逢年過(guò)節(jié)的多走動(dòng)走動(dòng),平時(shí)多聚會(huì),出去吃飯逛街。
熱門(mén)問(wèn)答