高等編譯器設計
(九十學年度第二學期)

授課教師:陳俊良 (聯絡方式)
上課時間:週四14:10~17:00
上課教室:資訊系館101教室

搬投影機輪值表

日期 學號 姓名
5/30 B87506046 陳建穎
6/6 R90922042 蕭博仁

 

 

 

 

 

 

 

 

作業 (繳交紀錄

作業九 在KVM中的synchronized機制, wait, notify..., 有沒有可能造成deadlock, 若有, 什麼情況下造成, 若沒有, 請說明原因。 期限:05/30 14:10
繳交作業
作業八 RESCHEDULEATBRANCH時, 若thread的priority為1時, 會做幾個instrcution才reschedule? 期限:05/16 14:10
繳交作業
作業七 java compiler用什麼方式達到先乘除後加減,例:precedence a+b*c 及:a+b-c associatility 期限:05/02 14:10
繳交作業
作業六 為什麼在clas BatchParser中, parseName()傳回的參數要包成IdentiferToken? ex: 在packageDeclaration(), 其實也只用到t.getName(), 為什麼不傳個string就好了。 期限:04/25 14:10
繳交作業
作業五 在Java Compiler中,有Parser和Scanner這兩個class。試討論這兩個class應為Parser繼承Scanner、Scanner繼承Parser、或互相不繼承?儘量以OO的觀點討論各有何優缺點? 期限:04/18 14:10
繳交作業
作業四
在JVM Runtime中, 互相為繼承關係的classes, 試討論data field, method table是否要duplicate? 請多用不同的觀點來討論, 例如可以拿instance variable, static variable來說明。以效率及記憶體的考量說明。以static method, non-static method的觀點.....
期限:04/11 14:10
繳交作業
作業三 請trace在bytecodes.c的INVOKE VIRTUAL,即2116行~2174行,包括其中呼叫的function,並繳交一份trace報告 期限:03/28 14:10
繳交作業
作業二 iadd指令在那一個檔案的第幾行? 期限:03/21
繳交作業
作業一 Java使用stack machine,你覺得stack machine好不好?理由?(和register machine比較)。 期限:03/21
繳交作業

課程內容

編譯器是計算機系統軟體最重要的核心之一。除了研讀編譯器設計的理論外,倘若能剖析一個真實的編譯器,對編譯器的理解將非常的有幫助。另一方面,Java語言是目前十分搶手的話題。目前台灣已有不算少會寫Java應用程式的人,相較起來深入瞭解Java系統內部的工程師就有限了。

這門課的目的是希望藉著剖析一個真實的編譯器,讓同學可以更深切的了解編譯器系統。我們挑定的是Sun公司的Java編譯器,即javac。另外,因為Java語言的很多功能必須要在run-time時才做得出來,我們也會談到Java Virtual Machine (JVM)。這個年度打算看的是J2ME-cldc裡頭的KVM。

課程大綱

背景知識

這門課並沒有「官方的」先修科目。不過既然要看Java Compiler,最好是有一些 Java語言和Compiler的背景知識。

教材

因為是剖析一個真實的程式碼,我們沒有特定的教科書。但我們會參考到Java的規格書(都有html檔): 另外,課程後半探討JVM時,下列書籍也是不錯的參考書; 我們真正要的是相關的原始檔。 Sun公司已開放Java的原始檔,所以我們原始檔的取得絕對合法。但是我們沒有權力把Sun公司的原始檔公開在網站上。所以請各位自行到Sun公司網站下載下列檔案 為了讓其他的網頁可以正確的鍵結到由Sun公司下載過來放在「你的」local disk的資料,我們將用統一的鍵結格式 <a href="file:/J:/xyz"> 。所以請依照下列步驟放置下載來的東西。
  1. 假如你的環境是Windows,建立一個子目錄,比如叫AdvCompiler。 用subst指令把AdvCompiler設定成virtual drive "J:"。
  2. 假如你的環境是Unix,在root下建立一個目錄名叫"J:"。 (有沒有人知道更理想的方法?)
  3. 把langspec-2.0.html.zip全部解壓縮到J:\langspec。
  4. 把vmspec.2nded.html.zip全部解壓縮到J:。
  5. 由jdk1_3_0-src-win.zip中解壓縮出javac的原始檔到一暫時的目錄, 比如叫tmp。 Javac的原始檔共有177個檔案位於下列的子目錄中:
    • jdk1.3-src\src\share\classes\sun\tools\asm
    • jdk1.3-src\src\share\classes\sun\tools\java
    • jdk1.3-src\src\share\classes\sun\tools\javac
    • jdk1.3-src\src\share\classes\sun\tools\tree
    • jdk1.3-src\src\share\classes\sun\tools\util
  6. 下載並安裝Lab441Tools
  7. 產生出javac的html documentation, 同時會把原始程式轉成html格式。指令為:
    441javadoc -sourcepath tmp\jdk1.3-src\src\share\classes -d j:\javacDoc -private -splitindex -use @%LAB441%\bin\javacPackages
  8. 我們的網頁不會鍵結到tmp子目錄下的檔案。 你可以把它們清掉了。
  9. 試試看下列的鍵結正不正確。

評分方式

原則上,我們不會有筆試。學期成績將依同學們上課表現、或許還會有口試或是書面報告等項目來評定。