第一篇:編譯原理教學(xué)大綱(范文模版)
編譯原理教學(xué)大綱
一、課程的性質(zhì)、地位
本課程是計(jì)算機(jī)專業(yè)的重要專業(yè)課之一,是一門理論性和實(shí)踐性較強(qiáng)的課程。主要介紹程序設(shè)計(jì)語言編譯程序構(gòu)造的基本原理和基本實(shí)現(xiàn)方法。本課程主要講授形式語言、有限自動(dòng)機(jī)、自上而下和自下而上的語法分析、LR分析方法、屬性文法和語法制導(dǎo)翻譯、語義分析的代碼產(chǎn)生、存儲器的動(dòng)態(tài)分配與管理、符號表的組織與管理、優(yōu)化問題、代碼生成等內(nèi)容。通過本課程學(xué)習(xí),使學(xué)生對編譯的基本概念、原理和方法有完整的和清楚的理解,并能正確地、熟練地運(yùn)用。
二、課程的目的、任務(wù)和要求
該課程的目的是讓學(xué)生掌握程序設(shè)計(jì)語言編譯程序構(gòu)造的一般原理、基本設(shè)計(jì)方法、主要實(shí)現(xiàn)技術(shù)和一些自動(dòng)構(gòu)造工具。通過本課程的學(xué)習(xí),使學(xué)生較好地掌握編譯原理的基本原理和基本技術(shù)、編譯原理中涉及的基本算法、基本結(jié)構(gòu)和主要實(shí)現(xiàn)技術(shù),從而讓學(xué)生了解將高級程序設(shè)計(jì)語言源程序翻譯成計(jì)算機(jī)能處理的目標(biāo)代碼語言的整個(gè)過程,基本掌握計(jì)算機(jī)系統(tǒng)軟件之一 編譯程序的構(gòu)造原理及相關(guān)技術(shù),同時(shí),還可提高學(xué)生計(jì)算機(jī)專業(yè)素質(zhì),培養(yǎng)學(xué)生的抽象思維能力。通過學(xué)習(xí),學(xué)生可基本掌握計(jì)算機(jī)系統(tǒng)軟件之一 編譯程序的構(gòu)造原理及相關(guān)技術(shù),同時(shí),還可提高學(xué)生計(jì)算機(jī)專業(yè)素質(zhì),培養(yǎng)學(xué)生的抽象思維能力。
三、與其它課程的關(guān)系
要求學(xué)生具有較好的計(jì)算機(jī)基礎(chǔ)知識,對計(jì)算機(jī)的工作原理有一定了解,前導(dǎo)課程包括:高等數(shù)學(xué)、線性代數(shù)、計(jì)算機(jī)原理、離散數(shù)學(xué)、高級程序設(shè)計(jì)語言、數(shù)據(jù)結(jié)構(gòu)等課程。
四、課程內(nèi)容(建議理論課時(shí):62 上機(jī)課時(shí):18)第一章 編譯程序概論
1、教學(xué)目的及要求:
本章介紹編譯程序在計(jì)算機(jī)科學(xué)中的地位和作用,介紹編譯技術(shù)的發(fā)展歷史,講解編譯程序、解釋程序的基本概念,概述編譯過程,介紹編譯程序的邏輯結(jié)構(gòu)和編譯程序的組織形式。要求理解編譯程序、解釋程序和遍的基本概念;掌握編譯過程各階段的任務(wù)和編譯程序邏輯結(jié)構(gòu)及其各部分的基本功能。
2、教學(xué)內(nèi)容:
編譯程序,編譯過程概述,編譯程序的結(jié)構(gòu),編譯程序與程序設(shè)計(jì)環(huán)境,編譯程序生成,學(xué)習(xí)構(gòu)造編譯程序。
3、教學(xué)重點(diǎn):
重點(diǎn):編譯程序工作的基本過程及其各階段的基本任務(wù),編譯程序總框。
4、教學(xué)難點(diǎn):
編譯的遍。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)2學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、什么是編譯程序
2、編譯過程概述
3、編譯程序的結(jié)構(gòu)
4、編譯技術(shù)和軟件工具 第二章 文法和語言
1、教學(xué)目的及要求:
本章是編譯原理課程的理論基礎(chǔ),要求理解文法、語言、規(guī)范推導(dǎo)、規(guī)范歸約和短語、簡單短語、句炳的基本概念;掌握語言的求解方法、文法的二義性與遞歸性的判斷方法及句型的分析方法。
2、教學(xué)內(nèi)容:
形式語言的基本概念,包括符號串的基本概念和術(shù)語、文法和語言的形式定義、句型分析、文法和語言的Chomsky分類,二義性。
3、教學(xué)重點(diǎn):
上下文無關(guān)文法,語言定義。
4、教學(xué)難點(diǎn):
推導(dǎo),文法與語言的相互轉(zhuǎn)換。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)5學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、文法的直觀概念
2、符號和符號串
3、文法和語言的形式定義
4、文法的類型
5、語法樹和二義性
6、句型的分析
7、文法中的實(shí)用限制 第三章 詞法分析
1、教學(xué)目的及要求:
本章介紹編譯程序的第一個(gè)階段詞法分析的設(shè)計(jì)原理和設(shè)計(jì)方法,要求掌握正則文法、狀態(tài)轉(zhuǎn)換圖、DFA、NFA、正規(guī)式和正規(guī)集的基本概念和詞法分析設(shè)計(jì)與編寫。
2、教學(xué)內(nèi)容:
詞法分析的設(shè)計(jì)原理和設(shè)計(jì)方法,源程序輸入與詞法分析程序輸出、正則文法及其狀態(tài)轉(zhuǎn)換圖、確定的有限自動(dòng)機(jī)(DFA)不確定的有限自動(dòng)機(jī)(NFA)正則表達(dá)式與正規(guī)集。
3、教學(xué)重點(diǎn):
重點(diǎn):詞法分析器的任務(wù)與設(shè)計(jì),狀態(tài)轉(zhuǎn)換圖。
4、教學(xué)難點(diǎn):
正則文法、正規(guī)集、DFA、NFA的相互轉(zhuǎn)化。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)8學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、詞法分析程序的設(shè)計(jì)
2、單詞的描述工具
3、有窮自動(dòng)機(jī)
4、正規(guī)式和有窮自動(dòng)機(jī)的等價(jià)性
5、正規(guī)文法和有窮自動(dòng)機(jī)間的轉(zhuǎn)換 第四章 語法分析—自上而下分析
1、教學(xué)目的及要求:
本章介紹編譯程序的第二個(gè)階段語法分析的設(shè)計(jì)方法和實(shí)現(xiàn)原理,包括自上而下分析的無回朔的遞歸下降分析、LL(1)分析法。要求理解遞歸下降分析、LL(1)文法的基本概念;掌握無回朔的遞歸下降分析的設(shè)計(jì)和實(shí)現(xiàn)、LL(1)分析表的構(gòu)造與分析方法。
2、教學(xué)內(nèi)容:
語法分析器的功能,自上而下語法分析(遞歸下降分析法,預(yù)測分析程序),LL(1)分析法,遞歸下降分析程序構(gòu)造,預(yù)測分析程序。
3、教學(xué)重點(diǎn):
遞歸下降子程序,預(yù)測分析表構(gòu)造,LL(1)文法。
4、教學(xué)難點(diǎn):
LL(1)文法預(yù)測分析表構(gòu)造。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)5學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、確定的自頂向下分析思想
2、LL(1)文法的判別
3、某些非LL(1)文法到LL(1)文法的等價(jià)變換
4、不確定的自頂向下分析思想
5、確定的自頂向下分析方法 第五章 語法分析—自下而上分析
1、教學(xué)目的及要求:
要求理解算符優(yōu)先文法、最左素短語、有效項(xiàng)目的基本概念;掌握算符優(yōu)先分析方法、LR(0)文法的判斷及LR(0)分析表的構(gòu)造與分析方法、SLR(1)文法的判斷與SLR(1)分析方法和LR(1)文法的判斷與LR(1)分析方法。
2、教學(xué)內(nèi)容:
自下而上語法分析(算符優(yōu)先分析法),算符優(yōu)先分析,LR分析器,LR(0)項(xiàng)目集族和LR(0)分析表的構(gòu)造,SLR分析表的構(gòu)造,規(guī)范LR分析表的構(gòu)造。
3、教學(xué)重點(diǎn):
歸約,算符優(yōu)先表構(gòu)造,LR分析法。
4、教學(xué)難點(diǎn):
歸約,LR分析法。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)12學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、自底向上分析思想
2、算符優(yōu)先分析法
3、LR分析法 第六章 屬性文法和語法制導(dǎo)翻譯
1、教學(xué)目的及要求:
本章介紹編譯程序的第三個(gè)階段語義分析及中間代碼生成的設(shè)計(jì)原理和實(shí)現(xiàn)方法,要求理解語法制導(dǎo)翻譯、語義動(dòng)作的基本概念;掌握算數(shù)表達(dá)式和賦值語句到中間代碼的翻譯、布爾表達(dá)式和幾種控制語句的目標(biāo)代碼結(jié)構(gòu)分析和到四元式的語法制導(dǎo)翻譯;說明語句的語法制導(dǎo)翻譯。
2、教學(xué)內(nèi)容:
語法制導(dǎo)翻譯的基本概念、中間代碼的形式,可執(zhí)行語句和說明語句的語法制導(dǎo)翻譯方法。
3、教學(xué)重點(diǎn):
語法制導(dǎo)翻譯基本思想,語法制導(dǎo)翻譯概述,基于屬性文法的處理方法,自下而上分析制導(dǎo)翻譯概述。
4、教學(xué)難點(diǎn):
屬性文法的處理方法
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)9學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、屬性文法
2、語法制導(dǎo)翻譯概論
3、中間代碼的形式
4、簡單賦值語句的翻譯
5、布爾表達(dá)式的翻譯
6、控制語句的翻譯 第七章 符號表
1、教學(xué)目的及要求:
本章介紹編譯程序的組成部分之一符號表的管理,要求掌握符號表管理的基本方法。
2、教學(xué)內(nèi)容:
符號表的作用、建立、符號表欄目的組織、符號表上的操作。
3、教學(xué)重點(diǎn):
符號表的作用與內(nèi)容。
4、教學(xué)難點(diǎn):
符號表的內(nèi)容。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)3學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、符號表的作用和地位
2、符號表的主要屬性及作用
3、符號表的組織
4、符號表的管理 第八章 運(yùn)行時(shí)存儲空間組織
1、教學(xué)目的及要求:
本章介紹目標(biāo)程序運(yùn)行時(shí)的存儲組織方式,包括靜態(tài)存儲分配和動(dòng)態(tài)存儲分配。要求掌握各種存儲組織形式的基本方法。
2、教學(xué)內(nèi)容:
目標(biāo)程序運(yùn)行時(shí)的活動(dòng),運(yùn)行時(shí)存儲器的劃分,靜態(tài)存儲管理,簡單的棧式存儲分配的實(shí)現(xiàn),嵌套過程語言的棧式實(shí)現(xiàn),堆式動(dòng)態(tài)存儲分配。
3、教學(xué)重點(diǎn):
靜態(tài)分配策略和動(dòng)態(tài)分配策略基本思想,嵌套過程語言棧式分配,活動(dòng)記錄、運(yùn)行時(shí)棧的組織。
4、教學(xué)難點(diǎn):
嵌套過程語言棧式分配,活動(dòng)記錄、運(yùn)行時(shí)棧的組織。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)9學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、數(shù)據(jù)空間的三種不同使用方法
2、棧式存儲分配的實(shí)現(xiàn)
3、參數(shù)傳遞
第九章 代碼優(yōu)化
1、教學(xué)目的及要求:
本章介紹優(yōu)化的相關(guān)知識,要求掌握局部優(yōu)化,基本塊的DAG表示及其應(yīng)用,控制流分析和循環(huán)查找算法,到達(dá)定值與引用定值鏈,循環(huán)優(yōu)化。
2、教學(xué)內(nèi)容:
主要內(nèi)容:優(yōu)化概述,局部優(yōu)化,基本塊的DAG表示及其應(yīng)用,控制流分析和循環(huán)查找算法,到達(dá)定值與引用定值鏈,循環(huán)優(yōu)化。
3、教學(xué)重點(diǎn):
局部優(yōu)化;DAG的構(gòu)造與應(yīng)用。
4、教學(xué)難點(diǎn):
循環(huán)查找。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)6學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、優(yōu)化技術(shù)簡介
2、局部優(yōu)化
3、控制流分析和循環(huán)優(yōu)化 第十章 代碼生成
1、教學(xué)目的及要求: 本章介紹編譯程序的第五階段目標(biāo)代碼的生成的設(shè)計(jì)原理和實(shí)現(xiàn)方法,要求掌握四元式到匯編語言的目標(biāo)代碼生成方法。
2、教學(xué)內(nèi)容:
目標(biāo)機(jī)器模型,一個(gè)簡單代碼生成器,寄存器分配,DAG目標(biāo)代碼,窺孔優(yōu)化。
3、教學(xué)重點(diǎn):
簡單代碼生成器,寄存器分配策略。
4、教學(xué)難點(diǎn):
寄存器分配策略。
5、教學(xué)時(shí)間分配及進(jìn)度安排:
建議本章教學(xué)時(shí)數(shù)3學(xué)時(shí)。
6、章節(jié)內(nèi)容
1、代碼生成概述
2、一個(gè)計(jì)算機(jī)模型
3、一個(gè)簡單的代碼生成器
4、代碼生成研究現(xiàn)狀
注:使用教材-編譯原理(第二版).張素琴,呂映芝,蔣維杜,戴桂蘭編著,清華大學(xué)出版社,2005.2。參考書:
1)編譯原理, 何炎祥, 華中理工大學(xué)出版社, 2000.10 2)編譯原理, 陳火旺等, 國防工業(yè)出版社, 2000.1 3)編譯原理, 蔣立源, 西北工業(yè)大學(xué)出版社, 1999.9
第二篇:《編譯原理課程設(shè)計(jì)》教學(xué)大綱
《編譯原理課程設(shè)計(jì)》教學(xué)大綱
課程名稱: 課程編號: 適用專業(yè): 總 學(xué) 分: 總 周 時(shí): 主 撰 人: 撰寫日期:
一、目的與任務(wù)
通過程序設(shè)計(jì)上機(jī)調(diào)試程序?qū)崿F(xiàn)算法,學(xué)習(xí)編譯程序調(diào)試技巧和設(shè)計(jì)編譯程序的一般原則,加深對詞法分析、語法分析、語義分析和中間代碼生成等編譯階段及實(shí)用編譯系統(tǒng)的認(rèn)識,初步掌握編譯程序構(gòu)造的基本原理與技術(shù), 從形式語言理論的角度, 進(jìn)一步認(rèn)識與理解程序設(shè)計(jì)語言。通過編譯程序的編寫和調(diào)試能力的訓(xùn)練,激發(fā)學(xué)生進(jìn)一步思考問題,培養(yǎng)學(xué)生的學(xué)習(xí)興趣和創(chuàng)新能力。并進(jìn)一步培養(yǎng)學(xué)生的抽象思維能力,進(jìn)一步鞏固《編譯原理》課程所學(xué)知識。
本次課程設(shè)計(jì)的時(shí)間為2周,目的是通過實(shí)際的題目如:詞法分析、語法分析、代碼優(yōu)化等,使學(xué)生了解和掌握編譯程序的工作原理,同時(shí)培養(yǎng)學(xué)生用相關(guān)的程序設(shè)計(jì)語言進(jìn)行程序設(shè)計(jì),實(shí)現(xiàn)編譯的功能,從而提高學(xué)生的綜合能力。
二、教學(xué)基本要求
1.設(shè)計(jì)和調(diào)試過程要規(guī)范化
需求分析:將題目中要求的功能進(jìn)行敘述分析,并且設(shè)計(jì)解決此問題的數(shù)據(jù)存儲結(jié)構(gòu),(有些題目已經(jīng)指定了數(shù)據(jù)存儲的,按照指定的設(shè)計(jì)),設(shè)計(jì)或敘述解決此問題的算法,描述算法可以使用自然語言、偽代碼、或函數(shù)的方式。
給出實(shí)現(xiàn)功能的一組或多組測試數(shù)據(jù)(測試文法),程序調(diào)試后,將按照此測試數(shù)據(jù)進(jìn)行測試的結(jié)果列出來。
如果程序不能正常運(yùn)行或運(yùn)行過程中出現(xiàn)了不滿足算法思想的情況,寫出出現(xiàn)這一情況的原因或改進(jìn)行的方法。
源程序要按照寫程序的規(guī)則來編寫。要結(jié)構(gòu)清晰,重點(diǎn)函數(shù)的重點(diǎn)變量,重點(diǎn)功能部分要加上清晰的程序注釋。
程序能夠運(yùn)行,要有基本的容錯(cuò)功能。盡量避免出現(xiàn)操作錯(cuò)誤時(shí)出現(xiàn)死循環(huán)。2.課程設(shè)計(jì)實(shí)習(xí)報(bào)告的書寫格式
編譯原理 436105 軟件工程 2W 2012.6
審 核 人:
① 設(shè)計(jì)題目
②運(yùn)行環(huán)境(軟、硬件環(huán)境)③算法設(shè)計(jì)的思想 ④算法設(shè)計(jì)分析 ⑤主要函數(shù) ⑥源代碼 ⑦運(yùn)行結(jié)果分析 ⑧收獲及體會 3.實(shí)施方式
本次課程設(shè)計(jì)分成9個(gè)題目,都有一定的工作量,涵蓋本課程內(nèi)容和實(shí)際應(yīng)用相關(guān)的主要技術(shù),學(xué)生可以自由組隊(duì)選擇其中一個(gè)實(shí)現(xiàn)。課程設(shè)計(jì)題目見“主要內(nèi)容”。
根據(jù)老師給定的9個(gè)題目進(jìn)行分析設(shè)計(jì),本次課程設(shè)計(jì)采取分組的辦法進(jìn)行,3-4人為一組,要求每組學(xué)生在規(guī)定時(shí)間內(nèi)獨(dú)立完成。4.答辯:課題的論述、測試及問題回答
三、課程設(shè)計(jì)內(nèi)容
1、詞法分析器的構(gòu)造:
人們理解一個(gè)程序,起碼是在單詞級別上來思考。同樣,在編繹一個(gè)程序時(shí),也是在單詞級別上來分析和翻譯源程序。詞法分析是編繹的基礎(chǔ),執(zhí)行詞法分析的程序即為詞法分析器,它的任務(wù)是對輸入或給定的源程序,從左至右逐個(gè)字符進(jìn)行掃描,產(chǎn)生一個(gè)個(gè)單詞符號,把作為字符串的源程序改造成單詞符號串的中間程序。設(shè)計(jì)目的與任務(wù):
通過本課程設(shè)計(jì)教學(xué)所要求達(dá)到的目的是:對詞法分析工作流程進(jìn)行總體設(shè)計(jì)和詳細(xì)設(shè)計(jì),最終用C語言來設(shè)計(jì)一個(gè)簡單詞法分析器,實(shí)現(xiàn)對源程序的詞法分析功能,對輸入程序去除注釋,并以二元式形式輸出程序中所有單詞。
2、正則表達(dá)式到NFA 在編譯系統(tǒng)中,詞法分析階段是整個(gè)編譯系統(tǒng)的基礎(chǔ)。對于單詞的識別,有限自動(dòng)機(jī)FA是一種十分有效的工具。有限自動(dòng)機(jī)由其映射f是否為單值而分為確定的有限自動(dòng)機(jī)DFA和非確定的有限自動(dòng)機(jī)NFA。在非確定的有限自動(dòng)機(jī)NFA中,由于某些狀態(tài)的轉(zhuǎn)移需從若干個(gè)可能的后續(xù)狀態(tài)中進(jìn)行選擇,故一個(gè)NFA對符號串的識別就必然是一個(gè)試探的過程。這種不確定性給識別過程帶來的反復(fù),無疑會影響到FA的工作效率。而DFA引擎在任意時(shí)刻必定處于某個(gè)確定的狀態(tài),它搜索是無需象NFA一樣必須記錄所有的可能路徑(trace multiple possible routes through the NFA),這也是DFA運(yùn)行效率高于NFA的原因。而已經(jīng)證明DFA是NFA的一個(gè)特例,即對于每一個(gè)NFA M存在一個(gè)DFA M’’,使得L(M)=L(M’’)。
設(shè)計(jì)目的與任務(wù)
通過本課程設(shè)計(jì)教學(xué)所要求達(dá)到的目的是:充分理解和掌握NFA,DFA以及NFA確定化過程的相關(guān)概念和知識,編程實(shí)現(xiàn)對輸入的任意正規(guī)式轉(zhuǎn)換成NFA的形式輸出。
3、NFA的確定化
有限自動(dòng)機(jī)理論是描述詞法規(guī)則的基本理論。一條詞法規(guī)則表示一個(gè)正規(guī)表達(dá)式(又叫正規(guī)式),而一個(gè)正規(guī)式又可化為一個(gè)DFA(確定有窮自動(dòng)機(jī)),這個(gè)有限自動(dòng)機(jī)可用來識別詞法規(guī)則所定義的所有單詞符號。把程序設(shè)計(jì)語言的所有詞法規(guī)則都構(gòu)造出相應(yīng)的有限自動(dòng)機(jī),就得到一個(gè)詞法分析器。然后,再轉(zhuǎn)換為計(jì)算機(jī)可識別的程序就能自動(dòng)實(shí)現(xiàn)詞法的分析和檢查。在實(shí)際應(yīng)用中,用NFA(不確定有窮自動(dòng)機(jī))識別詞法存在不確定和狀態(tài)的冗余,因而,就要將NFA(不確定有窮自動(dòng)機(jī))轉(zhuǎn)換為DFA(確定有窮自動(dòng)機(jī)),消除了不可到達(dá)和不確定。設(shè)計(jì)目的與任務(wù)
通過本課程設(shè)計(jì)教學(xué)所要求達(dá)到的目的是:掌握從NFA到DFA的轉(zhuǎn)換,以及用子集法把NFA轉(zhuǎn)換成DFA理論,編程實(shí)現(xiàn)將NFA(不確定有窮自動(dòng)機(jī))轉(zhuǎn)換為DFA(確定有窮自動(dòng)機(jī))。
4、DFA的最小化
確定性有限自動(dòng)機(jī)(DFA ,Deterministic Finite Automata)的最小化仍是有限自動(dòng)機(jī)應(yīng)用及實(shí)現(xiàn)方面的重要問題之一。DFA的最小化可以揭示狀態(tài)之間的內(nèi)在聯(lián)系,便于其存儲實(shí)現(xiàn),便于建立用DFA描述的任務(wù)模型,一些理論問題也與最小化思想有關(guān)。DFA的最小化是指,構(gòu)造一個(gè)與之等價(jià)且狀態(tài)數(shù)最小的DFA,即等價(jià)最小DFA。許多文獻(xiàn)給出了一個(gè)最小化算法,算法的思想是,構(gòu)造狀態(tài)集的一個(gè)劃分,再將這個(gè)劃分中的每個(gè)子集作為新的狀態(tài),從而得到等價(jià)最小DFA。
DFA的最小化可以揭示狀態(tài)之間的內(nèi)在聯(lián)系,便于其存儲實(shí)現(xiàn),便于建立用DFA描述的任務(wù)模型,一些理論問題也與最小化思想有關(guān)。
5、語法分析之LL(1)文法
通過該課程設(shè)計(jì)了解了程序語言的自上而下的語法分析過程,提高了編程能力,能使我們了解編程語言更多的細(xì)節(jié) 設(shè)計(jì)目的與任務(wù)(1)讀入文法(2)求出first(), follow()(3)判斷是否為LL(1)文法
(4)若是,構(gòu)造分析表;
(5)輸入一個(gè)字符串看是否是文法的一個(gè)句子。
6、算符優(yōu)先文法
一個(gè)文法,如果它的任一產(chǎn)生式的右邊都不含有兩個(gè)相繼(并列)的非終結(jié)符,即不 含有如下形式的產(chǎn)生式的右部:
?QR?
則我們稱該文法為算符文法。
假設(shè)文法中的任意兩個(gè)終結(jié)符之間最多只有一個(gè)優(yōu)先關(guān)系,則該文法稱為算符優(yōu)先文法。
該課程設(shè)計(jì)按照求,(P),(P)各兩條規(guī)則,求出各非終結(jié)符的集。然后按照算符優(yōu)先算法求出各終結(jié)符的算符優(yōu)先關(guān)系,填寫算符優(yōu)先表,并將其輸出。
7、LR(0)分析表的構(gòu)造
LR分析技術(shù)是一種有效的自下而上分析技術(shù),是一種規(guī)范歸約,其中L表示從左到右掃描輸入串,R表示構(gòu)造一個(gè)最右推導(dǎo)的逆過程。這種方法可以適用于很大一類上下無關(guān)文法的語法分析。LR方法的基本思想是:在規(guī)范歸約過程中,一方面記住已經(jīng)移進(jìn)和歸約出的整個(gè)符號串,即記住“歷史”;另一方面根據(jù)所用的產(chǎn)生式推測未來可能碰到的輸入符號,即對未來進(jìn)行“展望”。當(dāng)一串貌似句柄的符號串呈現(xiàn)于分析棧的頂端時(shí),我們希望能夠根據(jù)所記載的“歷史”和“展望”以及“現(xiàn)實(shí)”的輸入符號等三方面的材料,來確定棧頂?shù)姆杺魇欠駱?gòu)成相對某一產(chǎn)生式的句柄。
LR分析器的核心部分是一張分析表。這張分析表包括兩部分,一是“動(dòng)作”(ACTION)表,另一是“狀態(tài)轉(zhuǎn)換”(GOTO)表。對于一個(gè)文法,如果能用一個(gè)每步頂多向前檢查K個(gè)輸入符號的LR分析器進(jìn)行分析,則這個(gè)文法就稱為LR(K)文法。本文研究的LR(0)文法即K=0時(shí)的文法。
設(shè)計(jì)目的與任務(wù)
本課程設(shè)計(jì)所設(shè)計(jì)目的與任務(wù)是:通過C語言程序?qū)崿F(xiàn)LR(0)分析表的構(gòu)造,熟練掌握LR(0)分析表的構(gòu)造方法,即利用拓廣文法和構(gòu)造項(xiàng)目集規(guī)范族的方法。了解LR(0)分析器的工作原理,并能利用LR(0)分析表對輸入串進(jìn)行分析。
8、逆波蘭表達(dá)式生成算法
雖然源程序可以直接翻譯為目標(biāo)語言代碼,但許多編譯程序采用了獨(dú)立于機(jī)器的、復(fù)雜性介于源語言和機(jī)器翻譯語言之間的中間語言:后綴式(逆波蘭表達(dá)式)等。這樣做的好處是:
(1)便于進(jìn)行與機(jī)器無關(guān)的代碼優(yōu)化工作;(2)使編譯程序改變目標(biāo)機(jī)更容易;
(3)使編譯程序的結(jié)構(gòu)在邏輯上更為簡單明確。以中間語言為界面,編譯前端和后端的接口更清晰。設(shè)計(jì)目的與任務(wù)
將非后綴式用來表示的算術(shù)表達(dá)式轉(zhuǎn)換為用逆波蘭式來表示的算術(shù)表達(dá)式,并能運(yùn)行查看結(jié)果。
9、表達(dá)式的中間代碼生成
源程序可以直接翻譯為目標(biāo)語言代碼,但是許多編譯程序卻采用了獨(dú)立于機(jī)器的、復(fù)雜性介于源語言和機(jī)器語言之間的中間語言。這樣我們可以做下面工作:
(1):便于進(jìn)行與機(jī)器無關(guān)的代碼優(yōu)化工作;(2):使編譯程序以改變目標(biāo)機(jī)更容易;(3):使編譯程序的結(jié)構(gòu)在邏輯上更為簡單明確;
而以中間語言為界面,編譯前端和后端的接口更清晰,表達(dá)式可以用四個(gè)域分別稱為OP、ORG1、ORG2及RESULT來表示。
四、時(shí)間安排
《編譯原理課程設(shè)計(jì)》安排在第三學(xué)期進(jìn)行,時(shí)間2周(17-18周)。
五、組織管理
1.由院、系指派經(jīng)驗(yàn)豐富的專業(yè)教師擔(dān)任指導(dǎo)教師。
2.課程設(shè)計(jì)實(shí)行指導(dǎo)教師負(fù)責(zé)制,由指導(dǎo)教師全面負(fù)責(zé)課程設(shè)計(jì)的指導(dǎo)與管理工作。
六、成績考核與評定
學(xué)生課程設(shè)計(jì)結(jié)束后寫出總結(jié)報(bào)告,對設(shè)計(jì)的內(nèi)容和效果進(jìn)行總結(jié),按照學(xué)生在設(shè)計(jì)期間的表現(xiàn),指導(dǎo)老師對每位學(xué)生寫出評語和鑒定,系課程設(shè)計(jì)領(lǐng)導(dǎo)小組組織答辯,最后確定每位學(xué)生課程設(shè)計(jì)成績,課程設(shè)計(jì)成績分為優(yōu)、良、中、及格和不及格五個(gè)等級。課程設(shè)計(jì)成績?yōu)槠綍r(shí)表現(xiàn)30%、設(shè)計(jì)報(bào)告50%、答辯20%。評分標(biāo)準(zhǔn):
① 優(yōu)秀:目的明確,態(tài)度端正,模范遵守學(xué)校的各項(xiàng)紀(jì)律。工作認(rèn)真,積極 主動(dòng),吃苦耐勞,能出色的完成設(shè)計(jì)任務(wù)。撰寫了高質(zhì)量的總結(jié)報(bào)告。答辯準(zhǔn)確流利。
② 良好:目的明確,態(tài)度端正,能遵守學(xué)校的各項(xiàng)紀(jì)律,工作比較積極主動(dòng)。能較好地完成設(shè)計(jì)任務(wù),成績較突出,表現(xiàn)良好;撰寫了質(zhì)量比較高的實(shí)習(xí)報(bào)告。答辯較準(zhǔn)確流利。
③ 及格:目的明確,態(tài)度基本端正,能遵守學(xué)校紀(jì)律,在督促下能開展工作 并完成一定的設(shè)計(jì)任務(wù),無大的違紀(jì)違規(guī)現(xiàn)象;撰寫了實(shí)習(xí)報(bào)告。通過了答辯。
④ 不及格:實(shí)習(xí)態(tài)度端正,不能遵守實(shí)習(xí)單位的紀(jì)律,不服從領(lǐng)導(dǎo),自由散漫,工作消極被動(dòng),不能完成實(shí)習(xí)任務(wù),實(shí)習(xí)期間有失職、曠工、打架、酗酒等大的過失。或無實(shí)習(xí)報(bào)告,沒有通過答辯。
2.成績評定
依據(jù)上述考核內(nèi)容,最后采用優(yōu)(>90分)、良(80~89分)、中(70~79分)及格(60~69分)、不及格(<60分)五級記分制評定學(xué)生課程設(shè)計(jì)成績。
七、主要參考資料
教材:
《編譯原理及實(shí)踐》馮博琴等譯,機(jī)械工業(yè)出版社 教學(xué)參考書
1、《程序設(shè)計(jì)語言與編譯》龔天富、侯文永編,電子工業(yè)出版社。
2、《編譯原理》呂映芝、張素琴、蔣維杜主編,清華大學(xué)出版社,1998年
3、《編譯原理》胡倫駿、徐蘭芳、劉建農(nóng)編,電子工業(yè)出版社2002年
4、《編譯原理》(第二版)蔣立源、康慕寧主編,西北工業(yè)大學(xué)出版社,2002年
5、《編譯原理習(xí)題精選》陳意云、張昱著,中國科技大學(xué)出版社,2002年
6、《編譯原理習(xí)題與解析》 伍春香著,清華大學(xué)出版社,2001年
7、《編譯原理實(shí)驗(yàn)指導(dǎo)書》自編
第三篇:《編譯原理》課程設(shè)計(jì)教學(xué)大綱
《編譯原理》課程設(shè)計(jì)教學(xué)大綱
揭金良 2006.10.20 1 目的
通過課程設(shè)計(jì),將《編譯原理》的相關(guān)理論和技術(shù)運(yùn)用到軟件開發(fā)中,提高學(xué)生的應(yīng)用程序設(shè)計(jì)能力,提高分析問題、解決問題的能力。內(nèi)容
利用編譯原理的某種思想或方法,設(shè)計(jì)一個(gè)應(yīng)用程序,實(shí)現(xiàn)的具體內(nèi)容自擬(見下面的選題指導(dǎo))。要求
進(jìn)行簡單的需求分析、設(shè)計(jì)說明,寫出程序結(jié)構(gòu)框架,闡明設(shè)計(jì)思路、用到的原理和方法。程序規(guī)模適中,著重于內(nèi)核功能。估計(jì)時(shí)間
總共時(shí)間2.5周(150學(xué)時(shí)),其中:1.講課2學(xué)時(shí);2.上機(jī)48學(xué)時(shí)調(diào)試;3.其余非上機(jī)時(shí)間由同學(xué)自行安排分析、檢查問題、繪制流程圖、寫相關(guān)文檔,最后集成設(shè)計(jì)(實(shí)驗(yàn))報(bào)告并自行打印。過程指導(dǎo)
5.1 選題
通過平時(shí)積累,找到適合于自己的應(yīng)用或某種軟件功能,該應(yīng)用能利用編譯原理中的某些理論。題目大小適中。參考題目如下: 表達(dá)式計(jì)算器
表達(dá)式計(jì)算器:這是一款算術(shù)表達(dá)式計(jì)算程序,通過輸入表達(dá)式達(dá)到計(jì)算的目的,可代替目前普遍使用的計(jì)算器。使用了編譯原理中的詞法分析、算符優(yōu)先分析等。根據(jù)功能的不同可分為:
⑴無符號整數(shù)表達(dá)式計(jì)算器:輸入無符號整數(shù)表達(dá)式,輸出結(jié)果。難度:較難。工作量:中等。
? 整數(shù)表達(dá)式計(jì)算器:考慮負(fù)數(shù)。難度:較難。工作量:中等。? 定點(diǎn)實(shí)數(shù)表達(dá)式計(jì)算器:難度:較難。工作量:中等。
? 通用表達(dá)式計(jì)算器:考慮1.23e-2的形式輸入。難度:難。工作量:中等。⑵函數(shù)表達(dá)式計(jì)算程序:這是一款能計(jì)算函數(shù)值的實(shí)用程序,輸入含有自變量x的函數(shù)表達(dá)式被接受后,可接著輸入自變量x的值,輸出函數(shù)值y的值。使用了詞法分析、算符優(yōu)先分析。根據(jù)功能的不同可以分為:
? 多項(xiàng)式函數(shù)計(jì)算程序:只處理多項(xiàng)式函數(shù),如f(x)=x^3+x^2+5等。難度:較難。也可設(shè)計(jì)成其他專用函數(shù)計(jì)算程序,如冪函數(shù)計(jì)算、三角函數(shù)計(jì)算等。但要避免出現(xiàn)不同用,如不要設(shè)計(jì)成僅能處理f(x)=2^x的冪函數(shù),因?yàn)檫@樣的函數(shù)利用普通編程就能實(shí)現(xiàn),無法體現(xiàn)編譯原理。工作量:中等。
? 通用初等函數(shù)計(jì)算程序:能處理所有的初等函數(shù)的計(jì)算。如f(x)=3*sin(x/2+3.1415)+x^2等。難度:難(因?yàn)樯婕暗胶瘮?shù)名稱和參數(shù)的識別問題)。工作量:較大。
? 二元或多元函數(shù)的計(jì)算:如f(x,y)=x^2+y^2等。難度和工作量同一元函數(shù)的計(jì)算。⑶邏輯運(yùn)算分析:輸入邏輯表達(dá)式串,對表達(dá)式進(jìn)行分析,并得出結(jié)果。難度:較難。2 字符串搜索程序
輸入要查找的字符串的正規(guī)表達(dá)式,軟件可在大量文本(要求不低于3000字符的文檔資料文件)中找到符合描述的字符串。這個(gè)設(shè)計(jì)可參考微軟.NET的正規(guī)表達(dá)式的功能。
⑴字符串搜索程序:使用到正規(guī)式、詞法分析等,還需要有較大的設(shè)計(jì)技巧。根據(jù)功能的不同可以分為:
? 名稱查找程序(類似于文件名):存有大量的名稱,如abc,123,a1,ab1245等,輸入要查找的規(guī)則,找出符合規(guī)則的名稱。
? 方案1:通配符,把“*、?”當(dāng)作通配符:如輸入“a*”,顯示“abc,a1,ab1245”;輸入“a?”,輸出“a1”。
? 方案2:正規(guī)式,把“*”當(dāng)作“閉包”,把“|”當(dāng)作“或”:如輸入“(a|b)1”,輸出“a1”;輸入“(a|b)*c”,輸出“abc”。
? 方案3:只要包含正規(guī)式即可,當(dāng)名稱中包含該正規(guī)式,就輸出來:如輸入“(a|b)1”,輸出“a1,ab1245(含有b1)”;輸入“(a|b)*”,輸出“abc,a1,ab1245”。
? 方案4:含有通配符的正規(guī)式,設(shè)“@”表示任意字母,“$”表示任意數(shù)字(其他可再設(shè)多一點(diǎn),如表示符號等,但會減少名稱中的符號種數(shù)):如輸入“a@*” 輸出“abc”;輸入“a(@|$)*”,輸出“abc,a1,ab1245”。
(以上涉及到正規(guī)式的方案難度較大,其他難度一般。注:以上的@$等符號是隨便設(shè)定的,與.NET中通用的符號不同且有沖突的,請?jiān)趯?shí)際編程時(shí)修改它。)
? 文本搜索程序:在一連串文本中搜索所需的字符串。同“名稱查找程序”中的有關(guān)正規(guī)式的方案,難度較大,具體正規(guī)式包含哪些符號和通配符可另定。
(關(guān)于正則表達(dá)式的介紹參見另一文檔,詳細(xì)信息見.NET框架聯(lián)機(jī)文檔)3 邏輯運(yùn)算分析
可對關(guān)系表達(dá)式進(jìn)行分析,并得出結(jié)果。這個(gè)設(shè)計(jì)結(jié)果可改變后用于電路分析、謂詞演算等。源程序掃描程序
對某種高級語言的源程序進(jìn)行分析,建立符號表,找出盡可能多的問題并輸出相關(guān)的出錯(cuò)信息。轉(zhuǎn)義符的識別
C語言的字符串常量書寫時(shí)使用了大量的轉(zhuǎn)義符,如“”表示單斜杠,而“n”表示換行(同“u000A”),“x20”表示十六進(jìn)制表示形式(恰好兩位)與 ASCII 字符匹配(這里代表值為32的ASCII字符,即空格)。請參照C語言教材,編制一個(gè)軟件,輸入包含轉(zhuǎn)義符的字符串,輸出沒有轉(zhuǎn)義符的真實(shí)字符串。難度:一般。工作量:一般。有限自動(dòng)機(jī)的運(yùn)行
設(shè)計(jì)一個(gè)確定的有限自動(dòng)機(jī),寫出狀態(tài)轉(zhuǎn)換函數(shù),或畫出狀態(tài)圖,編制程序,輸入一個(gè)字符串,程序能判別該字符串是否能被該有限自動(dòng)機(jī)接受,可以考慮輸出能否接受的同時(shí),輸出狀態(tài)路徑。難度:一般。
⑴整數(shù)的判斷:寫出整數(shù)的正規(guī)式,畫出狀態(tài)圖,寫出狀態(tài)轉(zhuǎn)換函數(shù)。編出程序。難度:簡單。
⑵同上的過程還可以進(jìn)行:正偶數(shù)的判斷、自然數(shù)的判斷、定點(diǎn)數(shù)的判斷等。⑶實(shí)數(shù)的判斷:過程同上。難度:一般。7 編寫一個(gè)語法分析程序
編寫一個(gè)語法分析程序,對輸入到緩沖區(qū)的符號進(jìn)行分析,建立相應(yīng)的語法樹,并輸出相應(yīng)的語法樹。編寫一個(gè)代碼生成程序
編寫一個(gè)代碼生成程序,形成三地址程序并輸出到文件中,打印三地址程序。9 學(xué)習(xí)使用LEX和YACC工具
LEX和YACC分別是生成詞法分析程序和語法分析程序的工具,即編譯程序的編譯程序。其功能非常強(qiáng)大,可用于任何語言的分析。
學(xué)習(xí)使用LEX和YACC工具并編寫相應(yīng)程序。請參考有關(guān)文檔資料。
5.2 分析
選好題目后,分析該題目的應(yīng)用性,可用到編譯原理的哪些理論?對它們進(jìn)行簡單闡述。同時(shí)對軟件進(jìn)行需求分析,通過回答下面問題得到:
1.軟件提供哪些功能?軟件有什么用?界面怎樣?怎樣使用該軟件?對輸入數(shù)據(jù)的格式有什么要求?用什么語言開發(fā)?怎樣測試該軟件?該軟件開發(fā)的進(jìn)度如何安排?
2.寫出以上問題的答案,然后自問:你的分析材料別人能非常清楚地看懂嗎?如果回答是肯定的,就可以搞設(shè)計(jì)了。
5.3 設(shè)計(jì)
對軟件劃分功能模塊,將模塊細(xì)化,設(shè)計(jì)出數(shù)據(jù)存放格式,寫出各模塊(函數(shù))的功能、傳遞參數(shù)的格式和返回值的類型,畫出模塊結(jié)構(gòu)圖。最后畫出較詳細(xì)的程序流程圖。
5.4上機(jī)
按課表的安排上機(jī)(修改設(shè)計(jì)/編碼/調(diào)試/測試)。
1.根據(jù)流程圖編制并輸入代碼,教師查看學(xué)生的設(shè)計(jì),對設(shè)計(jì)提出修改意見。2.修改設(shè)計(jì),繼續(xù)完成輸入代碼,并作初步調(diào)試。3.調(diào)試,教師幫助解決學(xué)生設(shè)計(jì)和調(diào)試中出現(xiàn)的難題。4.修改設(shè)計(jì)中的缺陷,完善程序。??
演示軟件,教師根據(jù)實(shí)際情況提出測試用例,學(xué)生作最后的修改和完善,教師評分。繼續(xù)完善程序,并完成設(shè)計(jì)說明書,上交成果。
5.5 注意事項(xiàng)
測試數(shù)據(jù)的設(shè)計(jì):每組測試數(shù)據(jù)包括輸入數(shù)據(jù)、預(yù)期的輸出結(jié)果、實(shí)際的輸出結(jié)果和預(yù)期的是否相吻合(如果不吻合,實(shí)際輸出什么?可能錯(cuò)誤的原因?檢查源代碼或設(shè)計(jì)進(jìn)行查錯(cuò),紀(jì)錄結(jié)果)。上交文檔
1.程序源代碼(打印,文件名中包含姓名);
2.一組較完備的測試數(shù)據(jù)(存在一個(gè)文本文件中);
3.設(shè)計(jì)報(bào)告:有關(guān)的文檔資料,包括:選題報(bào)告,簡單的軟件需求分析說明書,軟件設(shè)計(jì)說明,設(shè)計(jì)經(jīng)驗(yàn)總結(jié)。其中設(shè)計(jì)經(jīng)驗(yàn)總結(jié)可以包括下列方面:你在編程過程中花時(shí)多少?多少時(shí)間在紙上設(shè)計(jì)?多少時(shí)間上機(jī)輸入和調(diào)試?多少時(shí)間在思考問題?遇到了哪些難題?你是怎么克服的?你對你的軟件如何評價(jià)?你的收獲有哪些? 評分
教師對每個(gè)實(shí)驗(yàn)結(jié)果進(jìn)行評分(優(yōu)、良、中、及格、不及格),記入成績。以下幾方面可以提高分?jǐn)?shù): 7.1 軟件實(shí)用性強(qiáng);
7.2 軟件使用了編譯原理中的某些理論; 7.3 軟件具有擴(kuò)展性; 7.4 各類文檔寫的很規(guī)范;
7.5 設(shè)計(jì)時(shí)非常投入,設(shè)計(jì)后很有心得; 7.6 其他優(yōu)點(diǎn)。
第四篇:編譯原理 學(xué)習(xí)心得
國際學(xué)院 0802 楊良燕 200819100227
《編譯原理》課程學(xué)習(xí)心得
《編譯原理》是計(jì)算機(jī)專業(yè)的一門重要課程,正如教材
第一章的引論所述,“編譯程序是現(xiàn)代計(jì)算機(jī)系統(tǒng)的基本組成部分之一”。“一個(gè)編譯程序就是一個(gè)語言翻譯程序,語言翻譯程序把一種語言(源語言)書寫的程序翻譯成另一種語言(目標(biāo)語言)的等價(jià)程序”。
通過這一學(xué)期的學(xué)習(xí),我覺得編譯原理是一門理論性很強(qiáng)的課程,從文法和語言的概念到LL(1)文法和LR(0)文法的分析,幾乎都是對具體問題的抽象。因而,我們需要更多的時(shí)間來理解、掌握相關(guān)的知識,當(dāng)然在這一過程中也存在很多問題,比如我們后期學(xué)習(xí)具體文法的分析方法時(shí),對于文法的概念不夠清晰,影響了上課的效率,知道老師再次給我們講解了文法等基礎(chǔ)的知識點(diǎn),我們才慢慢掌握后面所學(xué)的LL(1)文法等,也發(fā)現(xiàn)了知識點(diǎn)之間的關(guān)聯(lián)。此外,這門課程的課時(shí)被安排得很少,一周只有一次,這樣很不利于我們對這門重要課程的理解和掌握。但是我覺得我們很幸運(yùn),因?yàn)槔蠋熢谟邢薜恼n程中盡量將知識點(diǎn)以比較容易接受的方式給我們講解,教我們用簡單的方法理解記憶不同的知識,對于我們提出的問題,無論課上或是課外,老師一直是不厭其煩,甚至利用課余時(shí)間為我們講解重要的難題。
編譯原理這門課程不僅僅在于其本身的理論價(jià)值,更在于為我們解決問題提供的思維方式和方法。從LL(1)到LR(0),問題不斷被解決的同時(shí),又有一個(gè)個(gè)新的問題提了出來。對計(jì)算機(jī)語言世界的知識積累,像滾雪球一樣越滾越大。這個(gè)逐漸遞進(jìn),逐漸解決問題的過程對我來說是收獲很大的。整個(gè)過程好像踏著前人研究編譯理論的路線,不斷感覺他們遇到的問題,更重要的是他們解決問題的思路。編譯原理的課程帶給我的不只是如何去編譯程序這樣的理論知識,相信更重要的是一種如何“自動(dòng)計(jì)算”的思路。通過對相關(guān)編譯問題的具體分析,讓我體會最深的是一種“自動(dòng)計(jì)算”的思想,同時(shí)完成編譯試驗(yàn)后,更是感到了一種“自動(dòng)計(jì)算”的快樂。”然而我明白自己雖然對編譯有了一定的了解,我懂得了文法的分析,學(xué)會了構(gòu)造確定和非確定有限自動(dòng)機(jī),學(xué)會了LL(1)文法和LR(0)文法等,但是并沒有完全掌握,對于這些知識點(diǎn)的實(shí)質(zhì)性和其他方面,更是認(rèn)識不深。作為一名學(xué)習(xí)計(jì)算機(jī)科學(xué)與技術(shù)的學(xué)生,我明白編譯原理是軟件工程的基礎(chǔ),課程的結(jié)束并不意味著學(xué)習(xí)的結(jié)束,只有通過以后的學(xué)習(xí),才能更深入地了解編譯原理。
第五篇:編譯原理實(shí)驗(yàn)報(bào)告
編譯原理實(shí)驗(yàn)報(bào)告
報(bào)告完成日期 2018.5.30
一. 組內(nèi)分工與貢獻(xiàn)介紹
二. 系統(tǒng)功能概述;
我們使用了自動(dòng)生成系統(tǒng)來完成我們的實(shí)驗(yàn)內(nèi)容。我們設(shè)計(jì)的系統(tǒng)在完成了實(shí)驗(yàn)基本要求的前提下,進(jìn)行了一部分的擴(kuò)展。增加了聲明變量類型、類型賦值判定和聲明的變量被引用時(shí)作用域的判斷。從而使得我們的實(shí)驗(yàn)結(jié)果呈現(xiàn)的更加清晰和易懂。
三. 分系統(tǒng)報(bào)告;
一、詞法分析子系統(tǒng)
詞法的正規(guī)式:
標(biāo)識符
<字母>(<字母>|<數(shù)字字符>)* 十進(jìn)制整數(shù)
0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 八進(jìn)制整數(shù) 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* 十六進(jìn)制整數(shù) 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* 運(yùn)算符和分隔符 +| * | / | > | < | = |(|)| <=|>=|==; 對于標(biāo)識符和關(guān)鍵字: A5—〉 B5C5 B5—〉a | b |??| y | z C5—〉(a | b |??| y | z |0|1|2|3|4|5|6|7|8|9)C5|ε 綜上正規(guī)文法為: S—〉I1|I2|I3|A4|A5 I1—〉0|A1 A1—〉B1C1|ε C1—〉E1D1|ε D1—〉E1C1|ε
E1—〉0|1|2|3|4|5|6|7|8|9 B1—〉1|2|3|4|5|6|7|8|9 I2—〉0A2 A2—〉0|B2 B2—〉C2D2 D2—〉F2E2|ε E2—〉F2D2|ε
C2—〉1|2|3|4|5|6|7 F2—〉0|1|2|3|4|5|6|7 I3—〉0xA3 A3—〉B3C3 B3—〉0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f C3—〉(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)|C3|ε
A4—〉+ |-| * | / | > | < | = |(|)| <=|>=|==; A5—〉 B5C5 B5—〉a | b |??| y | z C5—〉(a | b |??| y | z |0|1|2|3|4|5|6|7|8|9)C5|ε
狀態(tài)圖
流程圖:
詞法分析程序的主要數(shù)據(jù)結(jié)構(gòu)與算法
考慮到報(bào)告的整潔性和整體觀感,此處我們僅展示主要的程序代碼和算法,具體的全部代碼將在整體的壓縮包中一并呈現(xiàn)
另外我們考慮到后續(xù)實(shí)驗(yàn)中,如果在bison語法樹生成的時(shí)候推不出目標(biāo)的產(chǎn)生式時(shí),我們設(shè)計(jì)了報(bào)錯(cuò)提示,在這個(gè)詞的位置出現(xiàn)錯(cuò)誤提示,將記錄切割出來的詞在code.txt中保存,并記錄他們的位置。
以下是我們的主要代碼:
進(jìn)制的識別:
結(jié)果展示:
二、語法分析子系統(tǒng)
根據(jù)選擇的語法分析方法進(jìn)行描述
我們使用了遞歸子程序發(fā),并且對原有的產(chǎn)生式進(jìn)行了改寫,改寫后的結(jié)果如下: P→LP1|L L→S
S→id=E|{P}|if C then S | if C then S
1else S2 | while C do S1 C→E1C’
C’→>E2| E→int8E’| int10E’| int16E’| idE’|T E’→+T|-T||+TE’|-TE’ T→int8T’| int10T’| int16T’| idT’|F T’→*F|/F|*FT’|/FT’ F→(E)|int8|int10|int16|id 簡化的語法圖: S的語法圖: C的語法圖: E的語法圖: T的語法圖: F的語法圖: 流程圖: 語法分析子系統(tǒng)的主要數(shù)據(jù)結(jié)構(gòu)與算法 我們采用了自動(dòng)生成技術(shù),同樣在這里也是展示主要的核心功能代碼,全部的代碼展示在壓縮包中: 我們在設(shè)計(jì)時(shí),實(shí)現(xiàn)了產(chǎn)生式對應(yīng)的字符串同時(shí)標(biāo)識產(chǎn)生式定義的int值 輔助程序: 生成語法樹的程序: 1.樹節(jié)點(diǎn): 2.創(chuàng)建新節(jié)點(diǎn) 3.創(chuàng)建實(shí)數(shù)類型新節(jié)點(diǎn) 4.創(chuàng)建標(biāo)識符類型新節(jié)點(diǎn) 5.輸出語法樹 三、三地址碼生成器 算法的基本思想: 我們增加了聲明變量類型、類型賦值判定和聲明的變量被引用時(shí)作用域的判斷。從而使得我們的實(shí)驗(yàn)結(jié)果呈現(xiàn)的更加清晰和易懂。 在報(bào)錯(cuò)的時(shí)候,我們會呈現(xiàn)類型、作用域和賦值三種的問題的報(bào)錯(cuò)信息。 流程圖: 算法展示: 四、實(shí)驗(yàn)體會 這次實(shí)驗(yàn)其實(shí)總的來說是讓我們更加清晰的理解到了我們所學(xué)的內(nèi)容。有時(shí)候我們上課聽講,課下復(fù)習(xí)寫作業(yè)的時(shí)候,其實(shí)看似掌握了所學(xué)內(nèi)容,但實(shí)際上并沒有親身體會的操作很難讓我們深刻的理解其中的相關(guān)意義。通過這次實(shí)驗(yàn),我們能夠從根源處了解到了我們所學(xué)的內(nèi)容,并且基于我們理解之后的輸出。比如詞法分析不能采用空格來區(qū)分單詞,因?yàn)榇嬖诩訙p乘除等運(yùn)算符和分隔符,使用空格來區(qū)分可能會造成錯(cuò)誤的分解。又比如我們再在程序設(shè)計(jì)中,常常體會到效率的重要性。影響詞法分析的效率的主要因素是各個(gè)狀態(tài)的分支如何規(guī)劃。如果每個(gè)進(jìn)來的單詞都能在最短的時(shí)間和最少的匹配次數(shù)內(nèi)找到其入口,則效率將得到很大程度上的提高。所以由此我們產(chǎn)生了聲明變量類型、賦值和作用域的想法,將其放在最后來進(jìn)行判斷,這樣可以提高整體的執(zhí)行效率。 另外,這次小組成員彼此不在一個(gè)班級,這樣從某一方面來說,也加強(qiáng)了我們互相快速熟識并團(tuán)結(jié)協(xié)作的能力,有了這種體驗(yàn),我想我們在今后的生活中,面對這種情況的時(shí)候,將會變得更加有經(jīng)驗(yàn)。 五、源程序 詞法分析器: 輸入結(jié)果: 輸出結(jié)果: 語義分析結(jié)果: 輸入: 第二組數(shù)據(jù)的輸入: 輸出: 三地址碼的輸入: 第二組數(shù)據(jù)的輸入: 輸出: