石鳳貴
摘要:《編譯原理》課程是高校計(jì)算機(jī)專業(yè)一門核心專業(yè)課,培養(yǎng)學(xué)生熟悉編譯程序的內(nèi)部結(jié)構(gòu)及原理,為從事軟件開發(fā)奠定基礎(chǔ),從而提升軟件人員的素質(zhì)和能力。LR(0)分析是構(gòu)造其他LR分析器的基礎(chǔ)。該文介紹了LR(0)語法分析可視化動(dòng)態(tài)演示系統(tǒng)的分析與設(shè)計(jì)。
關(guān)鍵詞:編譯原理;LR(0);文法
中圖分類號(hào):TP311
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)03-0083-02
1 背景
《編譯原理》是高等學(xué)校計(jì)算機(jī)專業(yè)的一門必修課,理論性比較強(qiáng),主要介紹程序設(shè)計(jì)語言翻譯的原理、技術(shù)及實(shí)現(xiàn)。計(jì)算機(jī)只能識(shí)別0和1所構(gòu)成的指令序列,高級(jí)計(jì)算機(jī)語言編寫的程序不能直接在機(jī)器上運(yùn)行,需要將源程序轉(zhuǎn)換為等價(jià)的目標(biāo)程序,這個(gè)轉(zhuǎn)換過程就是編譯。從源程序到目標(biāo)程序轉(zhuǎn)換的過程就是編譯過程,過程比較復(fù)雜,需要?jiǎng)澐譃槎鄠€(gè)階段將源程序由一種表現(xiàn)形式轉(zhuǎn)換為另一種形式,每個(gè)階段的操作在邏輯上是緊密相連的。編譯過程分為六個(gè)階段(如圖1所示):
2 LR(0)
LR(0)是一種“移進(jìn)一規(guī)約”自底向上的分析文法,當(dāng)棧頂符號(hào)串形成句柄時(shí)就采取規(guī)約,因此這種分析方法的關(guān)鍵是如何確定句柄。LR(k)分析方法是1965年Knuth提出的,參數(shù)k表示向右查看輸入串符號(hào)的個(gè)數(shù)。
LR(0)分析器由總控程序、分析表或分析函數(shù)、分析棧3個(gè)部分組成,其工作過程如圖2所示[1]。
LR(0)分析實(shí)例:
A.對(duì)文法G的產(chǎn)生式編號(hào):
(0)S-→E (4)A→d
(1) E→Aa
(5)B→Cb
(2) E→Bb
(6)B→d
(3) A→Ca
B.構(gòu)造這個(gè)文法的LR(O)分析表(如表1)[2][3]:C.對(duì)字符串bccd#用LR(O)分析器進(jìn)行分析(如表2):
3 系統(tǒng)總體設(shè)計(jì)
3.1 系統(tǒng)功能分析
本系統(tǒng)完成了對(duì)編譯原理相關(guān)知識(shí)的基本操作,采用人機(jī)交互界面,有一定的規(guī)范性,操作方便,比較直觀。主要功能有:
1)新建窗口,用于創(chuàng)建新的工程,也可打開演示工程。
2)在主窗口(一個(gè)類似VC的界面)中,可以編輯文法和源文件,系統(tǒng)并根據(jù)格式標(biāo)準(zhǔn)檢查輸入文檔是否有錯(cuò),若出錯(cuò)則產(chǎn)生提示。
3)生成對(duì)應(yīng)文法的分析表和狀態(tài)機(jī),并可以對(duì)狀態(tài)機(jī)進(jìn)行顯示類型的操作。
4)利用對(duì)應(yīng)文法的分析表對(duì)相應(yīng)的源文件進(jìn)行動(dòng)態(tài)分析,在這里顯示四個(gè)窗口——語法樹、源文件、堆棧、分析表,還可以進(jìn)行單步顯示,這樣利于觀察其變化;還可以通過窗口操作對(duì)窗口進(jìn)行“層疊”“平鋪”等操作。
3.2系統(tǒng)功能模塊框圖
3.3系統(tǒng)總體流程圖
4 系統(tǒng)詳細(xì)設(shè)計(jì)
4.1 生成LR(O)狀態(tài)機(jī)的程序流程圖
4.2 LR(O)分析過程程序流程圖
參考文獻(xiàn):
[1]姜淑娟,張辰,劉兵.編譯原理及實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2016.
[2]康慕寧,林奕,編譯原理[M].北京:人民郵電出版社,2010.
[3]黃賢英,王柯柯,曹瓊,編譯原理及實(shí)踐教程[M].北京:清華大學(xué)出版社,2019.