999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

“編譯原理”課程實驗項目介紹

2009-02-04 05:35:58王生原張素琴
計算機教育 2009年23期

王生原 董 淵 張素琴

摘要:在“編譯原理”課程的教學中,實驗項目是十分關鍵的部分。Decaf/Mind項目是近幾年清華大學計算機系本科生“編譯原理”課程的主體實驗項目,在該項目中,學生在實驗框架基礎上,針對一個簡單面向對象語言的實現開展4~5個階段的編程實驗,對理解和鞏固理論知識以及提高軟件系統的開發能力有較大幫助。本文就Decaf/Mind項目的背景、內容以及實施情況進行簡要介紹。

關鍵詞:編譯原理;課程實驗;Decaf/Mind項目

中圖分類號:G642 文獻標識碼:A

在清華大學計算機系本科生“編譯原理”課程的教學中,Decaf/Mind課程實驗項目從1998級開始,至現在的2007級,經歷了10屆學生。1998~2002年,該項目是選作的(但分值較高的),自2003級之后成為必做的課程實驗項目。本文首先介紹Decaf/Mind項目的背景,然后根據目前的情況(2006~2007級),對該實驗項目的內容以及實施情況進行簡要介紹。

1Decaf/Mind項目的背景

2001年,我們引進了Stanford課程CS143(Compilers, http://www.stanford.edu/class/cs143/, CS143, Stanford University) 的課程實驗框架(其原始框架由Julie Zelenski設計)。該實驗框架設計實現一種簡單面向對象語言Decaf的編譯器,因此我們稱之為Decaf項目。

Decaf是一種強類型的、單繼承的簡單面向對象語言,是一種較為流行的教學語言,曾經在Stanford、MIT、University of Tennessee、Brown、Texas A&M、Southern Adventist等多所大學的相關課程中使用。

在1998級本科生的“編譯原理”課程(2001年秋季學期)中,我們首次采用了Decaf項目,并根據需要對實驗框架進行了一定的調整,包括適應Windows平臺、增加目標代碼在X86的執行以及對源語言進行適當的改動等。比如在2002級,我們對該項目進行一定的簡化之后,稱之為TOOL項目。

從2003級的課程之后,我們對原始的Decaf項目實驗框架進行了3次實質性改動。

在2003~2004級的Decaf項目中,我們將原先實驗框架的開發語言由C++改為Java。

在計50班(2005級“姚”班)的“編譯原理”課程中,我們參考了U.C.Berkeley課程CS164(Programming Languages and Compilers, http://inst.eecs.berkeley.edu/~cs164/archives. html, CS143, University of California at Berkeley)的COOL課程項目以及Cornell大學課程 CS412(Introduction to Compilers, http://www.cs.cornell.edu/ courses/cs412/2003sp/ CS412/413, Cornell University)中所采用的Iota項目,將實驗框架由原來的單遍組織改為多遍組織,我們稱之為Mind(Mind is not decaf)項目,并稱源語言為Mind語言。

由于計50班的編譯課程安排在Java程序設計課程之前,所以首次Mind項目的開發語言為C++。隨后,在2005級其他班的課程中,我們又將開發語言由C++改回Java。

從2006級開始,實驗框架沒有發生大的變動,只是對其進行微調或進行適當簡化。下面是對2006~2007級教學情況的介紹。

2課程實驗項目的內容

Decaf/Mind項目的實驗框架是設計實現Decaf/Mind語言的編譯器,該編譯器的工作原理如圖1所示。

我們將實驗分成如下5個階段:

階段1:詞法和語法分析。借助Lex和Yacc實現詞法和語法分析,一遍掃描后直接產生一種高級中間表示(實驗指定的抽象語法樹AST)。使用的Lex和Yacc版本分別為Flex(Jflex, http://jflex.de/)和BYACC/J(BYACC/J, http:// byaccj.sourceforge.net/)。原始的Decaf項目采用Yacc實現主要編譯階段,實驗的3個階段(詞法、語法分析階段,語義分析階段,生成三地址中間代碼階段)是一個單遍的過程(注:從三地址碼到MIPS匯編代碼的翻譯由實驗框架給定,沒有安排階段實驗)。對于這個單遍的實驗框架,前幾屆學生感覺調試的難度較大,有一些語言特征難以實現,但它可以和理論課學習中語法制導翻譯的部分相呼應。修改框架后,依賴于Yacc工具的部分大大簡化,生成抽象語法樹AST形式后,符號表的建立和靜態語義的檢查工作只需使用樹遍歷算法就可實現,這符合現實中編譯系統的實際情況。這種框架不能與語法制導翻譯的理論直接呼應,但可用于間接指導。

階段2:語義分析。遍歷抽象語法樹構造符號表、實現靜態語義檢查(非上下文無關語法檢查以及類型檢查等),產生帶標注的抽象語法樹。在這一階段中,我們把語義分析分為對抽象語法樹AST的兩趟掃描進行:第一趟掃描時建立符號表的信息,并檢測符號聲明沖突以及跟聲明有關的符號引用問題(例如A繼承于B,但是B沒有定義的情況);第二趟掃描時檢查所有的語句以及表達式的參數數據類型。通過這一階段的實驗工作,學生可以熟練掌握Visitor設計模式的使用。

階段3:中間代碼生成。將帶標注的抽象語法樹(decorated AST)所表示的輸入程序翻譯成適合后期處理的另一種中間表示方式,即三地址碼TAC,并在合適的地方加入諸如檢查數組訪問越界、數組大小非法等運行時錯誤的內容。通過一階段的實驗工作,學生可以掌握常見語言成分的中間代碼翻譯方法,并且可以對過程調用約定、面向對象機制的實現方法、存儲布局等內容有切實的了解。

階段4:中間代碼優化。根據教學計劃,目前的實驗框架只要求基于TAC實現一些簡單的數據流分析,沒有包含中間代碼優化算法的內容。在2005~2007級的實驗中,只要求學生實現活躍變量分析,既包括以基本塊為單位的分析,也包括以基本塊內單個語句為單位的分析。

階段5:目標代碼生成。實驗框架包括匯編指令選擇、寄存器分配和棧幀管理,實驗內容可以設計為對這些部分進行改進??紤]到學生負擔問題,目前我們沒有安排這一階段的實驗任務。

完成這些階段后,即可產生適合實際MIPS機器的匯編代碼,可以利用由美國Wisconsin大學所開發的MIPS R2000/R3000模擬器SPIM(MIPS SPIM, University of Wisconsin-Madison, http://pages.cs.wisc.edu/~larus/spim.html) 來運行這些匯編代碼。

3課程實驗項目的實施

Decaf/Mind項目一般在“編譯原理”課程學期的第4或第5周開始,歷時8周(遇特殊情況順延),共4個階段,各階段2周。為鼓勵學生積極進取,學生可以對實驗工作自行擴展,自行擴展部分在第4階段截止日的隨后兩周內完成提交。

2006級每一階段的滿分成績為10分,實驗成績滿分40分。2007級實驗成績滿分35分,各階段的分布情況是:第1~3階段為9分,第4階段為8分。自行擴展部分在4個階段的評分完成后統一評分,最高5分,將直接加入總評成績。

各階段評分的依據包括程序部分和實驗報告部分。程序部分主要看輸出結果與標準輸出的一致程度,占每階段成績的80%;報告部分主要看對提交的作業報告的描述,例如是否清楚說明了自己的工作內容等。每階段截止提交2周后,該階段成績將被公布。如有抄襲,將取消階段成績,并給予警告。每名學生共有2天的晚交額度,每超過1天在總成績中扣2分,公布評閱結果時會同時提醒每名學生剩下的晚交額度。

對自行擴展部分的評價是綜合考慮創新性、實用性、合理性、難度、工作量等因素進行的。我們要求該部分選題一定是在已有實驗框架基礎上進行的有意義的改進工作,通常需要與教師或助教溝通后方可確定選題。教師可以對該部分的選題進行必要的引導,以避免一些意義不大的重復性工作。比如引導學生開展如下選題:函數式風格語句的實現、例外處理支持、垃圾回收機制、新的代碼生成機制(必要時增加新的低級表示)、有意義的優化算法(必要時增加新的中間表示)的實現等。

4結語

本文簡要介紹了清華大學計算機系本科生“編譯原理”課程Decaf/Mind課程實驗項目的基本情況,包括該項目的背景、內容以及實施情況。

Decaf/Mind課程實驗項目實施以來受到計算機系學生的重視。對大多數學生而言,這個實驗項目是入學以來遇到的第一個有一定規模的完整的程序設計項目(“編譯原理”課在大三上開設),又由于本課程在計算機系課程體系中具有重要地位,加之項目本身的魅力,學生興致較高,綜合能力有明顯提高。

“編譯原理”課程實驗項目的設計和實施是一項較為復雜的系統工程,期待國內同仁對本文所介紹的實驗項目提出寶貴的意見。

致謝:Decaf/Mind課程實驗項目經過多屆學生的實踐日趨成熟。我們要特別感謝楊俊峰(Stanford助教)、張迎輝(1999~2000級助教)、毛雁華(2000~2001級助教)、劉天淼(2001級助教)、唐碩(2002級助教)、梁英毅(2003~2005級助教)、張鐸(2005~2007級助教)、蔣波等學生的傾情奉獻。還有許多老師和學生對該項目作出了貢獻,但由于失去統計,沒能一一列出他們的名字,這里一并表達感謝。

Introduction to the Course Lab-Project for Principles and Practice of Compiler Construction

WANG Sheng-yuan, DONG Yuan, ZHANG Su-qin

(Department of Computer Science and Technology, Tsinghua University, Beijing 100084,China)

Abstract: The lab-project is very important in the course Principles and Practice of Compiler Construction. The Decaf/Mind project is the major lab-project of this course for the undergraduates in Department of Computer Science and Technology inTsinghua University. In the project, students will come through 4~5 phases of coding experience to implement a simple object-oriented language on the basis of the project framework. The project is helpful for both the theoretical study and the practical training in developing software system. The background, content and arrangement of the Decaf/Mind project are briefly introduced in the paper.

Key words: principles and practice of compiler construction; course lab-project; Decaf/Mind project

主站蜘蛛池模板: 久久婷婷综合色一区二区| 日韩一区二区在线电影| 成人伊人色一区二区三区| 久久中文字幕av不卡一区二区| 四虎国产在线观看| A级毛片无码久久精品免费| 国产乱人视频免费观看| 国产精品网址在线观看你懂的| 国产精品美女自慰喷水| 久久国产亚洲欧美日韩精品| 国产精品播放| 亚洲国产欧洲精品路线久久| 亚洲精品视频免费观看| 亚洲自拍另类| 亚洲综合九九| 国产综合精品日本亚洲777| 久久99热这里只有精品免费看| 国产成人啪视频一区二区三区| 国产精品国产三级国产专业不| 四虎永久免费地址| 亚洲精品制服丝袜二区| 久久不卡国产精品无码| 国产中文一区二区苍井空| 91口爆吞精国产对白第三集 | 日韩AV无码一区| 亚卅精品无码久久毛片乌克兰| 任我操在线视频| 亚洲国产中文精品va在线播放| 最近最新中文字幕免费的一页| 国产日产欧美精品| 亚洲国产欧美中日韩成人综合视频| 日本精品影院| 国产a v无码专区亚洲av| 呦女精品网站| 久久久噜噜噜久久中文字幕色伊伊| 国产精品亚洲日韩AⅤ在线观看| www.亚洲一区二区三区| 波多野结衣中文字幕一区二区| 国产精品手机视频一区二区| 日韩精品一区二区三区视频免费看| 国产精品无码AV片在线观看播放| 白丝美女办公室高潮喷水视频 | 天天躁夜夜躁狠狠躁图片| 99视频精品全国免费品| 日韩在线欧美在线| 亚洲青涩在线| 草草线在成年免费视频2| 亚洲欧洲日韩综合色天使| 人妻一区二区三区无码精品一区| 亚洲区视频在线观看| 精品欧美日韩国产日漫一区不卡| 综合色88| 永久免费无码日韩视频| 欧美精品成人| 欧美色香蕉| 亚洲综合极品香蕉久久网| 人妻精品久久无码区| 国产原创演绎剧情有字幕的| 真实国产乱子伦视频| 91麻豆精品国产高清在线| 999国内精品视频免费| 亚洲三级影院| 亚洲精品自拍区在线观看| 国产精品视频导航| 亚洲毛片在线看| 激情爆乳一区二区| 三上悠亚在线精品二区| 91精品国产麻豆国产自产在线| 9久久伊人精品综合| 男人天堂伊人网| 亚洲无码高清一区二区| 国产微拍一区| 中文字幕首页系列人妻| 啪啪永久免费av| 久久不卡精品| 在线色综合| 国产成人综合日韩精品无码不卡| 青草91视频免费观看| 欧美色视频在线| 精品无码一区二区在线观看| 99这里只有精品6| 成人av专区精品无码国产|