日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

构建LALR(1)项目集族

發(fā)布時(shí)間:2023/12/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构建LALR(1)项目集族 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

構(gòu)建LALR1)項(xiàng)目集族

構(gòu)造LALR1)項(xiàng)目有兩種思路。一種是:先構(gòu)造LR1)項(xiàng)目,再合并同心項(xiàng)目;另一種是:先構(gòu)造LR0)項(xiàng)目,再為為其配上搜索符。本文介紹第二種方法。

搜索符生成有兩種方法。一是,自己生成。二是,上一項(xiàng)目集傳播獲得的。項(xiàng)目集之間傳播搜索符遇到的問(wèn)題是:若多個(gè)項(xiàng)目集可以直接轉(zhuǎn)移到一個(gè)項(xiàng)目集I上,那么每當(dāng)I接收到,這些項(xiàng)目集傳播過(guò)來(lái)的新的搜索符時(shí),I就得重新再往下傳播自己新的搜索符。考慮到這一點(diǎn)可以使用壓棧的方式,將可以傳播的項(xiàng)目壓棧存好,將棧頂彈出用于傳播,在傳播過(guò)程中同時(shí)壓入新的可傳播項(xiàng)目。直到最后棧為空,即沒(méi)有項(xiàng)目可以傳播為止。

假設(shè)一含S’->S的拓廣文法為G。具體算法如下:

1. 構(gòu)造G LR0)項(xiàng)目集規(guī)范族(實(shí)就是為了方便分析,有皆可)。

2. I0,S’->S#壓入棧。(I0S’->S所在項(xiàng)目,#為搜索符,顯然它是可以傳播的)

3. 將規(guī)范族中的所有項(xiàng)目集的生成搜索符壓入棧。因?yàn)樗鼈兪切律目蓚鞑サ摹?/span>

4. 彈出棧頂,使棧頂往下傳播。傳播到下一個(gè)項(xiàng)目中后,生成自生成項(xiàng)目(就是自生符)。將新項(xiàng)入棧。繼續(xù)傳播,直到不能傳播為止。

5. 重復(fù)第4步,直到棧為空。

上面過(guò)程中,所有新項(xiàng)就是LALR1)項(xiàng)目集族了,包括自生的,和傳播的。

示例??紤]如下文法,求其LALR1)項(xiàng)目集族:

(1)S->L=R

(2)S->R

(3)L->*R

(4)L->i

(5)R->L

此文法的LR0)項(xiàng)目集規(guī)范族為:

I0:

S'->·S

 

I4:

L->*·R

 

S->·L=R

 

R->·L

 

S->·R

 

L->·*R

 

L->·*R

 

L->·i

 

L->·i

I5:

L->i·

 

R->·L

I6:

S->L=·R

I1:

S'->S·

 

R->·L

I2:

S->L·=R

 

L->·*R

 

R->L·

 

L->·i

I3:

S->R·

I7:

L->*R·

 

 

I8:

R->L·

 

 

I9:

S->L=R·

LALR1)項(xiàng)目集族構(gòu)建過(guò)程詳解(略去了記錄新項(xiàng)目操作):

I0S'->·S#壓棧。接著各項(xiàng)目集自生符壓棧

只有I0有生成符:

I0L->·*R=

I0L->·i,=

棧中的狀態(tài)為:

I0S'->·S,#

I0,L->·*R,=

I0,L->·i,=

 

接下來(lái),處理?xiàng)m敗?span lang="en-us">

彈出:I0L->·i,=傳播得:I5,L->i·,=。止住。

彈出:I0,L->·*R,=傳播得:I4,L->*·R,=。此項(xiàng)可以傳播,又可以自生成。先不急傳播,保存一下自生成的項(xiàng)目:

I4,R->·L,=

I4, L->·*R,=

I4, L->·i,=

棧狀態(tài):

I0S'->·S#

I0L->·*R=

I4,R->·L,=

I4, L->·*R,=

I4, L->·i,=

 

I4, L->*·R=接著往下傳播,得到I7, L->*R·,=。止住。

彈出:I4, L->·i,=傳播得I5,L->i·,=。止住。注意,此項(xiàng)已經(jīng)存在。

彈出I4, L->·*R,=傳播得:I4, L->*·R,=。此項(xiàng)已經(jīng)傳播過(guò)了。(算法應(yīng)該有個(gè)機(jī)制記錄項(xiàng)目是否被傳播過(guò))

彈出:I4,R->·L,=傳播得:I8, R->L·,=。止住。

彈出:I0L->·*R,=傳播得:I4, L->*·R=。已傳播過(guò)。

彈出I0,S'->·S,#此時(shí),它還沒(méi)有自生成,不著急傳播。它會(huì)生成:

I0,S->·L=R,#

I0,S->·R,#

I0,L->·i,#

I0,L->·*R,#

I0,R->·L,#

而這些項(xiàng)目都是可以傳播的,所有都得入棧(我的天呀,還有這么多!)。入棧后,棧狀態(tài)為:

I0,S->·L=R,#

I0,S->·R,#

I0,L->·i,#

I0,L->·*R,#

I0,R->·L,#

 

I0S'->·S#傳播得:I1, S'->S·,#不能繼續(xù)了。

彈出:I0,R->·L,#傳播得:I2,R->L·,#。止住。

彈出:I0,L->·*R,#傳播得:I4,L->*·R,#。此項(xiàng)又自生成:

I4,R->·L,#

I4,L->·*R,#

I4,L->·i,#

此時(shí)棧頂狀態(tài):

I0,S->·L=R,#

I0,S->·R,#

I0,L->·i,#

I4,R->·L,#

I4,L->·*R,#

I4,L->·i,#

 

I4,L->*·R,#傳播得I7,L->*R·,#

彈出:I4,L->·i,#傳播得:I5,L->i·,#

彈出:I4,L->·*R,#傳播得:I4,L->*·R已經(jīng)傳播過(guò)了。

彈出:I4,R->·L,#傳播得:I8,R->L·,#。

彈出:I0,L->·i,#傳播得:I5,L->i·,#I5中已有,所以要注意冗余處理)

彈出:I0,S->·R,#傳播得:I3,S->R·,#

彈出:I0,S->·L=R,#傳播得:I2,S->L·=R,#,沒(méi)有自生成項(xiàng),但可以傳播,故接著傳播得:I6,S->L=·R,#,此項(xiàng)自生成:

I6,R->·L,#

I6,L->·*R,#

I6,L->·i,#

此時(shí)棧狀態(tài)為:

I6,R->·L,#

I6,L->·*R,#

I6,L->·i,#

 

傳播I6,S->L=·R,#得:I9,S->L=R·,#

彈出:I6,L->·i,#傳播得:I5,L->i·,#

彈出:I6,L->·*R,#傳播得:I4,L->*·R,#已經(jīng)處理過(guò)了。

彈出:I6,R->·L,#傳播得:I8,R->L·,#到此為止棧終于空了!LALR1)項(xiàng)目集族也構(gòu)建好了!

I0:

I1:

I2:

I3:

I4:

I0S'->·S,#

I1, S'->S·,#

I2,S->L·=R,#

I3,S->R·,#

I4,L->*·R,=/#

I0,L->·*R,=/#

 

I2,R->L·,#

 

I4,R->·L,=/#

I0,L->·i,=/#

 

 

 

I4,L->·*R,=/#

I0,S->·L=R,#

 

 

 

I4,L->·i,=/#

I0,S->·R,#

 

 

 

 

I0,R->·L,#

 

 

 

 

I5:

I6:

I7:

I8:

I9:

I5,L->i·,=/#

I6,S->L=·R,#

I7, L->*R·,=/#

I8, R->L·,=/#

I9,S->L=R·,#

 

I6,R->·L,#

 

 

 

 

I6,L->·*R,#

 

 

 

 

I6,L->·i,#

 

 

 

總結(jié)

以上是生活随笔為你收集整理的构建LALR(1)项目集族的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。