MAD編譯器
有三個MAD編譯器:
原始的MAD,編譯器於1959年在密西根大學為IBM 704開發,後來又開發了運行密西根大學執行系統(UMES)和兼容時間共享系統(CTSS)作業系統的IBM 709和IBM 7090大型機。在20世紀60年代中期,MAD被馬里蘭大學移交給UNIVAC 1108。MAD的版本也可用於Philco 210-211和UNIVAC 1107。
MAD/I,是在密西根終端系統(MTS)下運行的IBM System / 360系列計算機的“擴展”版MAD。作為ARPA在密西根大學贊助的CONCOMP項目的一部分,1965年開始編寫新編譯器。隨著工作的進展,MAD / I逐漸變得清晰,MAD/I是一種獨立於最初的MAD 7090版本的新語言。
GOM(Good Old MAD),是運行密西根終端系統(MTS)的IBM System / 370系列大型機的原始7090 MAD的重新實現。GOM是由密西根大學計算中心的Don Boettner在20世紀80年代初創建的。
歷史
雖然MAD是由ALGOL 58激勵的,但它並沒有任何重要的方式與ALGOL 58相似。
以MAD編寫的程式包括MAIL,RUNOFF,第一個文本處理系統,以及其他一些工具,所有這些工具都在兼容的時間共享系統(CTSS)下。工作是在設計對於Multics的MAD編譯器,但它從未實現過。
以下是來自Brian Kernighan訪談時的一段有趣的引用,當時他被問到“編程中的什麼使你感興趣?”:
我認為編程最有趣的是1966年夏天在麻省理工學院的MAC項目的暑期工作,在那裡我開始了一個項目,在Multics早期為全新的GE 645創建了一個工作磁帶。我正在用MAD寫文章,這比我之前寫的FORTRAN和COBOL更容易也更令人愉快,而且我使用的是第一個分時系統CTSS,它比打卡更容易和更愉快。
與當時其他一些編譯器相比,MAD速度非常快。由於許多人對使用FORTRAN語言感興趣,但又想獲得MAD編譯器的速度,因此開發了一個名為MADTRAN(用MAD編寫)的系統。 MADTRAN只是一個從FORTRAN到MAD的翻譯器,然後生成機器碼。 MADTRAN通過SHARE分發。
MAD / I具有類似於ALGOL 60的句法結構以及來自原始MAD和PL / I的重要特徵。MAD / I被設計為一種可擴展的語言。它可以在MTS下使用,並提供了很多新的想法,這些想法可以用於其他語言,但與原始7090 MAD相比,MAD / I編譯速度較慢,MAD / I從未將其擴展到廣泛使用。
GOM基本上是7090 MAD語言,修改並擴展了360/370體系結構,並進行了一些明智的剪裁以更好地適應當前的編程實踐和問題。 MTS訊息系統是用GOM編寫的。
語言元素
MAD和GOM,但不是MAD / I,由以下元素組成:
輸入格式:MAD程式是在沖卡上寫的一系列陳述,通常每張卡一張表,儘管一張陳述可以持續到多張卡。第1-10列包含一個可選的語句標籤,注釋或注釋在第11列中使用字母“R”標記,而第73-80列未使用並可包含序列標識符。除了字元常量之外,其他空間並不重要。對於GOM輸入是自由形式,沒有序列欄位,行可以長達255個字元;以星號(*)開頭的行是注釋;以加號(+)開頭的行是連續行。
名稱:變數名稱,函式名稱和語句標籤具有相同的形式,即一個字母后跟零個到五個字母或數字。函式名稱以句點結束。所有名稱都可以下標(名稱後跟括弧,多個下標以逗號分隔)。對於GOM名稱可能長達24個字元,可能包含下劃線(_)字元。
該語言中的少數關鍵字是保留字,因為大多數關鍵字長於六個字母或被句號包圍。有一套標準的縮寫可以用來代替更長的單詞。這些由關鍵字的第一個和最後一個字母組成,它們之間有一個撇號,例如WHENEVER的W'R和DIMENSION的D'N。
數據類型:MAD為其數據類型使用術語“模式”。支持五種基本模式:
1.用或不用比例因子(1,+1,-1,1K10,1K)寫入的整數或八進制常數(至7777777777777K);
2.浮點寫有或沒有指數(0.,1.5,-0.05,+ 100.4,-4.,.05E-2,-.05E2,5E02,5.E2);
3.布爾(1B為真,0B為假);
4.語句標籤;
5.函式名稱寫作名稱,後跟句點(SQRT。)。
常數的模式可以通過在常量的末尾添加字元M後跟一個數字來重新定義,其中0表示浮點,1整數,2布爾值,3函式名稱和4語句標籤。
對於GOM,還添加了六種附加模式:字元,短整數,位元組整數,長整數,指針和動態記錄。
字母或字元常量以整數形式存儲,並使用美元符號作為分隔設定($ ABCDEF $)使用雙美元符號來輸入真實美元符號($$$。56 $為56美分)。長度超過六個字元的字元串使用數組表示。
數組和矩陣:
1.尺寸數量沒有限制。
2.允許使用負數和零以及浮點下標。
3.矩陣按順序依次改變最右邊的腳標,以連續的記憶體位置排列。
4.可以使用每個維度的下標,NAME(s1,s2,s3)或使用單個下標NAME(s1)來引用矩陣。
5.輸入輸出列表,矢量值語句和一些子程式允許使用塊表示法,其形式為A,...,B或A ... B,它是從A到B 的整個區域的引用。包括的。就矢量而言,A(1)... A(N)將是A(1),A(2),A(3),...,A(N)。
6.有些設施可以在運行時改變尺寸; 允許程式設計師在已經為陣列預留的整個塊內改變數組中初始元素的位置; 並允許指定任意的存儲映射。