導航:首頁 > 源碼編譯 > 編譯原理後繼符號集合

編譯原理後繼符號集合

發布時間:2024-08-26 12:56:05

㈠ 【編譯原理】第二章:語言和文法



上述文法 表示,該文法由終結符集合 ,非終結符集合 ,產生式集合 ,以及開始符號 構成。
而產生式 表示,一個表達式(Expression) ,可以由一個標識符(Identifier) 、或者兩個表達式由加號 或乘號 連接、或者另一個表達式用括弧包裹( )構成。

約定 :在不引起歧義的情況下,可以只寫產生式。如以上文法可以簡寫為:

產生式

可以簡寫為:

如上例中,

可以簡寫為:

給定文法 ,如果有 ,那麼可以將符號串 重寫 為 ,記作 ,這個過程稱為 推導
如上例中, 可以推導出 或 或 等等。

如果 ,
可以記作 ,則稱為 經過n步推導出 ,記作 。

推導的反過程稱為 歸約

如果 ,則稱 是 的一個 句型(sentential form )。

由文法 的開始符號 推導出的所有句子構成的集合稱為 文法G生成的語言 ,記作 。
即:


文法

表示什麼呢?
代表小寫字母;
代表數字;
表示若干個字母和數字構成的字元串;
說明 是一個字母、或者是字母開頭的字元串。
那麼這個文法表示的即是,以字母開頭的、非空的字元串,即標識符的構成方式。

並、連接、冪、克林閉包、正閉包。
如上例表示為:

中必須包含一個 非終結符


產生式一般形式:
即上式中只有當上下文滿足 與 時,才能進行從 到 的推導。

上下文有關文法不包含空產生式( )。


產生式的一般形式:
即產生式左邊都是非終結符。

右線性文法
左線性文法
以上都成為正則文法。
即產生式的右側只能有一個終結符,且所有終結符只能在同一側。

例:(右線性文法)

以上文法滿足右線性文法。
以上文法生成一個以字母開頭的字母數字串(標識符)。
以上文法等價於 上下文無關文法

正則文法能描述程序設計語言中的多數單詞。

正則文法能描述程序設計語言中的多數單詞,但不能表示句子構造,所以用到最多的是CFG。

根節點 表示文法開始符號S;
內部節點 表示對產生式 的應用;該節點的標號是產生式左部,子節點從左到右表示了產生式的右部;
葉節點 (又稱邊緣)既可以是非終結符也可以是終結符。

給定一個句型,其分析樹的每一棵子樹的邊緣稱為該句型的一個 短語
如果子樹高度為2,那麼這棵子樹的邊緣稱為該句型的一個 直接短語

直接短語一定是某產生式的右部,但反之不一定。

如果一個文法可以為某個句子生成 多棵分析樹 ,則稱這個文法是 二義性的

二義性原因:多個if只有一個else;
消岐規則:每個else只與最近的if匹配。

㈡ 編譯原理這個符號表示什麼 如圖~~~~

剪頭上加一個星號:S-*->aPb
表示從S可以推出含有非終結符P的形如aPb的句型。
剪頭上加一個加號:S-+->a
表示從S可以推出終結符a。

㈢ 急求!怎麼求編譯原理的FOLLOW集合在線等~

follow集合是針對非終結符而言的;follow(U)所表達的是句型中非終結符U的所有可能的後隨終結符號的集合,特別注意一點:「#」是識別符號的後隨附。
直接收取:形如「……Ua」的組合,直接把啊收入到follow(U)中
直接收取:形如「……UP……」的組合,(P是非終態符);把firth(P)除去ε直接收入到follow(U)中。
反復傳遞:形如「P-……U」的產生式,
follow(P)的全部內容傳遞到follow(U)中,或者說是P-……UB且first(B)包含ε,則把first(B)除去ε直接收入到follow(U)中,同時吧follow(P)的全部內容傳送到follow(U)中...

㈣ 什麼是文法(編譯原理)

【定義】

文法G定義為四元組(VN,VT,P,S)

其中 VN   :非終結符號(即語法變數)集

        VT   : 終結符號集

                   VN∩VT =Φ,令V= VN∪VT,V稱為文法G的字母表或字匯表。

        P  :產生式(α→β)集

        S :開始符號,且S∈VN ,S至少要在一條規則的左部出現。

【約定】

一般地,文法G的 四元組 不用全部給出 ,而只將產生式寫出。

約定:

    (1)第一條產生式的左部是開始符號

    (2)用尖括弧括起來的(或 大寫字母 )是非終結符號

    (3)不用尖括弧括起來(或 小寫字母 )是終結符號

    (4)還有一種習慣寫法,即 G[S] ,其中 S 是 開始符號 。

【舉例】

    例: G=(VN,VT,P,S)

           其中  VN={S},

           VT ={0,1},

           P={S→0S1,S→01}

           S是開始符號

㈤ 編譯原理 終結符集合 包不包括空 ε 為什麼

除了非終結符之外的符號都是終結符,「|」符號除外,只有這個啥都不是

㈥ 編譯原理問題

(1) 開始符號:S

非終結符號:S,E,S'
終結符號:{,t,a,e,b
(2)
First(S)={{,a}
First(S')={e,t}

First(E)={b}

Follow(S)={$,e,t}
Follow(S')={$,e,t}

Follow(E)={t}

㈦ 編譯原理follow集怎麼求例:s->xSNy|Nx;N->zN|空 答案:follow(S)={y,z,#},follw(N)={x,y}什麼時候有#

  1. 求某一非終結符的follow集,主要看產生式右端(含有該非終結符的右端)。

  2. 因為S是該文法的開始符,所以#在follow(S)中。在產生式S->xSNy的右端,S的後跟符號是first(Ny),即z和y。這樣follow(S)={y,z,#}

  3. 求follw(N)時,看產生式S->xSNy和S->Nx,在它們的右端都含有N,根據S->xSNy可知,y在follw(N)中;根據S->Nx可知,x在follw(N)中;這樣follw(N)={x,y}

    雖然產生式N->zN的右端也含有N,但根據follow集合的定義,將follw(N)加入follw(N)中沒有意義,所以不用計算。

  4. 對於不是開始符的其他非終結符,其follow集合有沒有#,要看產生式的結構(產生式右端)。

閱讀全文

與編譯原理後繼符號集合相關的資料

熱點內容
馬蜂窩app偏向什麼客戶 瀏覽:362
php簡單的登錄注冊 瀏覽:554
我們接到上級命令 瀏覽:347
php本周星期一 瀏覽:63
裘錫圭pdf 瀏覽:726
android模擬器調試 瀏覽:135
sap命令大全 瀏覽:296
mysql導出數據命令 瀏覽:954
文件夾隱藏了出不來 瀏覽:562
電信網上大學源碼 瀏覽:204
rr輪轉調度演算法 瀏覽:253
我的世界無法登入伺服器怎麼辦 瀏覽:148
文件加密授權特定隱藏訪問控制 瀏覽:801
程序員劍靈官網 瀏覽:516
php調用static方法 瀏覽:934
天正命令版 瀏覽:88
聚合支付加密幣 瀏覽:314
蜜源app是什麼時候創立的 瀏覽:708
計算機專業學51單片機 瀏覽:212
程序員不接受反駁 瀏覽:300