LR技術(shù)——LR(0)自動(dòng)機(jī)的構(gòu)建

LR語法分析器

特點(diǎn):
1)由表格驅(qū)動(dòng)
2)幾乎適用所有程序設(shè)計(jì)語言
3)無回溯的移入歸約技術(shù)
4)可以盡早檢測到錯(cuò)誤

項(xiàng)

什么是項(xiàng)?這里所說的項(xiàng)是一種狀態(tài),用來在LR語法分析中對(duì)集合進(jìn)行描述。
例如產(chǎn)生式 A -> XYZ 會(huì)有四個(gè)項(xiàng)
A -> ?XYZ
A -> X?YZ
A -> XY?Z
A -> XYZ?

產(chǎn)生式 A -> ε 只有一個(gè)項(xiàng) A -> ?

一個(gè)規(guī)范的LR(0)項(xiàng)族集提供了構(gòu)建確定有窮自動(dòng)機(jī)的基礎(chǔ)。稱為LR(0)自動(dòng)機(jī)。
LR(0)項(xiàng)集中的項(xiàng)共分為四大類:
1)歸約項(xiàng)目:歸約結(jié)束,原點(diǎn)在最右端。如:A -> a?
2)接收項(xiàng)目:左端為 S' 的歸約項(xiàng)目。如:S' -> a?
3)待約項(xiàng)目:原點(diǎn)后為非終結(jié)符的項(xiàng)目。如:A -> α?Bβ
4)移進(jìn)項(xiàng)目:原點(diǎn)后為終結(jié)符的項(xiàng)目。如:A -> α?aβ

LR(0)自動(dòng)機(jī)

構(gòu)建一個(gè)LR(0)自動(dòng)機(jī),會(huì)涉及到一個(gè)增廣文法和兩個(gè)函數(shù)(CLOSURE和GOTO)兩個(gè)函數(shù)之前都有了解了,分別用于求閉包和移進(jìn)。增廣文法含義如下:如果 G 是一個(gè)以 S 為開始符號(hào)的文法,那么 G 的增廣文法 G' 就是在 G 中加上新開始符號(hào) S‘ 和產(chǎn)生式 S'->S 而得到的文法。
這里以示例文法來講解自動(dòng)機(jī)的構(gòu)成

E ——> E + T | T
T ——> T * F | F
F ——> ( E ) | id

LR(0)自動(dòng)機(jī)
  1. 先畫出I0,使用增廣文法,構(gòu)造E'->E,然后求E的閉包得到E -> E + T、E -> T、T -> T * F、T -> F、F -> ( E )、F -> id,以上構(gòu)成I0集合,然后在他們前面都加上一個(gè)點(diǎn),得到

    I0

  2. 對(duì) E 進(jìn)行GOTO操作,就是把I0中所有包含有 ?E 的項(xiàng)拿出來,變成 E?,構(gòu)建成為I1

    I1

  3. 對(duì) T 進(jìn)行GOTO操作,得到I2

    I2

  4. 對(duì)F進(jìn)行GOTO操作,得到I3

    I3

  5. 對(duì)( 進(jìn)行GOTO操作,得到I4,由于此時(shí)?后為非終結(jié)符,故可以進(jìn)行閉包操作,對(duì)F求閉包

    I4

  6. 對(duì) id 進(jìn)行GOTO操作,得到I5

    I5

此時(shí)對(duì)I0的操作全部結(jié)束,圖應(yīng)為這樣

處理I0后

  1. 對(duì)I1中的E'->E進(jìn)行歸約操作,得到accept,注意只有開始符號(hào)才可以進(jìn)行這樣的操作。

  2. 對(duì)+進(jìn)行GOTO操作,得到I6

    I6

  3. 之后,對(duì)I2、I3由于已經(jīng)為歸約項(xiàng)目,所以無操作)、I4、I5(由于已經(jīng)為歸約項(xiàng)目,所以無操作)都進(jìn)行跟之前類似的操作,可以得到I7、I8

    I7

    I8

第二輪畫完后是這樣,為了便于區(qū)分,這里使用紅色標(biāo)記第二輪,值得注意的是I4部分很容易出現(xiàn)漏畫的情況。

  1. 對(duì)新生成的I6、I7、I8進(jìn)行處理,得到I9、I10、I11

    I9

    I10

    I11

    此時(shí)自動(dòng)機(jī)的圖為這樣:

  2. 最后對(duì)I9、I10、I11處理得到完整的自動(dòng)機(jī)。

至此,LR(0)自動(dòng)機(jī)構(gòu)建完畢。

此時(shí)我們再對(duì)歸約式分析時(shí)就可以采用這樣的方法來進(jìn)行分析

id * id =》 F * id =》 T * id =》 T * F =》 T =》 E

id * id 語法分析表

下一篇:LR技術(shù)——SLR語法分析表

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容