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