Bahasa pemrograman komputer MAD (Michigan Algorithm Decoder) adalah bahasa pemrograman dan kompiler untuk IBM 704 dan kemudian IBM 709, IBM 7090, IBM 7040, UNIVAC 1107, UNIVAC 1108, Philco 210-211, dan akhirnya komputer mainframe IBM S / 370. Dikembangkan pada tahun 1959 di University of Michigan oleh Bernard Galler, Bruce Arden dan Robert M. Graham, MAD adalah varian dari bahasa ALGOL. Itu banyak digunakan untuk mengajar pemrograman di perguruan tinggi dan universitas selama tahun 1960-an dan memainkan peran kecil dalam pengembangan CTSS, Multics, dan sistem operasi komputer Michigan Terminal System.
Arsip di Perpustakaan Sejarah Bentley Universitas Michigan berisi bahan referensi tentang pengembangan MAD dan MAD / I, termasuk tiga kaki linier cetakan dengan notasi tulisan tangan dan manual cetak asli.
MAD, MAD/I, GOM
Sementara MAD termotivasi oleh ALGOL 58, itu tidak menyerupai ALGOL 58 dengan cara yang signifikan.
Program yang ditulis dalam MAD termasuk MAIL, RUNOFF, salah satu sistem pemrosesan teks pertama, dan beberapa utilitas lainnya semuanya di bawah Compatible Time-Sharing System (CTSS). Pekerjaan dilakukan pada desain untuk kompiler MAD untuk Multics, tetapi tidak pernah diimplementasikan.
MAD cukup cepat dibandingkan dengan beberapa kompiler lain pada zamannya. Karena sejumlah orang tertarik untuk menggunakan bahasa FORTRAN dan belum ingin mendapatkan kecepatan kompiler MAD, sebuah sistem yang disebut MADTRAN (ditulis dalam MAD) dikembangkan. MADTRAN hanyalah seorang penerjemah dari FORTRAN ke MAD, yang kemudian menghasilkan kode mesin. MADTRAN didistribusikan melalui SHARE.
MAD / I memiliki struktur sintaksis yang mirip dengan ALGOL 60 bersama dengan fitur-fitur penting dari MAD asli dan dari PL / I. MAD / I dirancang sebagai bahasa yang dapat diperluas. Itu tersedia untuk digunakan di bawah MTS dan memberikan banyak ide-ide baru yang membuat jalan mereka ke bahasa lain, tetapi kompilasi MAD / I lambat dan MAD / I tidak pernah memperluas dirinya ke penggunaan luas bila dibandingkan dengan MAD 7090 asli.
GOM pada dasarnya adalah bahasa MAD 7090 yang dimodifikasi dan diperluas untuk arsitektur 360/370 dengan beberapa penyesuaian yang bijaksana agar lebih sesuai dengan praktik dan masalah pemrograman saat ini. Sistem Pesan MTS ditulis dalam GOM.
KOMPILER MAD
Ada tiga kompiler MAD:
- MAD asli, kompiler yang dikembangkan pada tahun 1959 di University of Michigan untuk IBM 704 dan kemudian komputer mainframe IBM 709 dan IBM 7090 yang menjalankan University of Michigan Executive System (UMES) dan sistem operasi Compatible Time-Sharing System (CTSS). Pada pertengahan 1960-an MAD porting di University of Maryland ke UNIVAC 1108. Versi MAD juga tersedia untuk Philco 210-211 dan UNIVAC 1107.
- MAD / I, versi MAD "diperpanjang" untuk seri IBM System / 360 komputer yang berjalan di bawah Michigan Terminal System (MTS). Pekerjaan pada kompiler baru dimulai pada tahun 1965 sebagai bagian dari proyek CONCOMP yang disponsori ARPA di University of Michigan. Seiring kemajuan pekerjaan, secara bertahap menjadi jelas bahwa MAD / I adalah bahasa baru yang independen dari versi asli MAD 7090.
- GOM (Good Old MAD), implementasi ulang dari 7090 MAD asli untuk seri komputer mainframe IBM System/370 yang menjalankan Michigan Terminal System (MTS). GOM diciptakan pada awal 1980-an oleh Don Boettner di University of Michigan Computing Center.
CONTOH "Hello, World"
Program contoh "hello, world" mencetak string "Hello, world" ke terminal atau tampilan layar.
VECTOR VALUES HELLOW=$13h0Hello, world*$
END OF PROGRAM
Karakter pertama dari garis diperlakukan sebagai kontrol carriage logis, dalam contoh ini karakter "0" yang menyebabkan garis spasi ganda dicetak.
Atau, kontraksi dapat digunakan, dan kompiler akan memperluasnya dalam daftar:
V'S HELLOW=$13h0Hello, world*$
E'M
ELEMEN BAHASA PEMROGRAMAN MAD
MAD dan GOM, tetapi bukan MAD / I, terdiri dari elemen-elemen berikut:
Input Format
Program MAD adalah serangkaian pernyataan yang ditulis pada kartu berlubang, umumnya satu pernyataan per kartu, meskipun pernyataan dapat dilanjutkan ke beberapa kartu. Kolom 1-10 berisi label pernyataan opsional, komentar atau keterangan ditandai menggunakan huruf "R" di kolom 11, dan kolom 73-80 tidak digunakan dan dapat berisi pengidentifikasi urutan. Spasi tidak signifikan di mana pun selain di dalam konstanta karakter. Untuk input GOM adalah bentuk bebas tanpa bidang urutan dan garis mungkin hingga 255 karakter; baris yang dimulai dengan tanda bintang (*) adalah komentar; dan garis yang dimulai dengan tanda plus (+) adalah garis lanjutan.
Names
Nama variabel, nama fungsi, dan label pernyataan memiliki bentuk yang sama, huruf diikuti oleh nol hingga lima huruf atau angka. Nama fungsi diakhiri dengan titik. Semua nama dapat disubskripsikan (nama diikuti dengan tanda kurung, dengan beberapa subskrip dipisahkan dengan koma). Untuk nama GOM mungkin sampai 24 karakter dan dapat menyertakan karakter garis bawah (_).
Beberapa kata kunci dalam bahasa adalah kata-kata yang dicadangkan karena sebagian besar lebih panjang dari enam huruf atau dikelilingi oleh titik. Ada seperangkat singkatan standar yang dapat digunakan untuk menggantikan kata-kata yang lebih panjang. Ini terdiri dari huruf pertama dan terakhir dari kata kunci dengan tanda kutip di antara mereka, seperti W'R untuk WHENEVER dan D'N untuk DIMENSION.
Data Types
MAD menggunakan istilah "mode" untuk tipe datanya. Lima mode dasar didukung:
- Integer ditulis dengan atau tanpa faktor skala (1, +1, -1, 1K10, 1K) atau sebagai konstanta oktal (hingga 7777777777777K);
- Floating point ditulis dengan atau tanpa eksponen (0., 1.5, -0.05, +100.4, -4., .05E-2, -.05E2, 5E02, 5.E2);
- Boolean (1B untuk benar dan 0B untuk salah);
- Statement Label, dan
- Function name ditulis sebagai nama diikuti dengan titik (SQRT.).
Mode konstanta dapat didefinisikan ulang dengan menambahkan karakter M diikuti oleh satu digit di akhir konstanta, di mana 0 menunjukkan titik mengambang, 1 bilangan bulat, 2 boolean, 3 nama fungsi, dan 4 label pernyataan.
Untuk GOM enam mode tambahan ditambahkan: CHARACTER, SHORT INTEGER, BYTE INTEGER, LONG INTEGER, POINTER, dan DYNAMIC RECORD.
Konstanta alfabet atau karakter disimpan sebagai bilangan bulat dan ditulis menggunakan tanda dolar sebagai pembatas ($ABCDEF$) dengan tanda dolar ganda yang digunakan untuk memasukkan tanda dolar sejati ($$$.56$ adalah 56 sen). String yang lebih panjang dari enam karakter diwakili menggunakan array.
Array dan Matriks
- Tidak ada batasan jumlah dimensi.
- Subskrip negatif dan nol serta floating-point diperbolehkan.
- Matriks bertingkat di lokasi memori berturut-turut dalam urutan yang ditentukan dengan memvariasikan subskrip paling kanan terlebih dahulu.
- Matriks dapat dirujuk menggunakan subskrip untuk setiap dimensi, NAME(s1,s2,s3), atau menggunakan subskrip tunggal, NAME(s1).
- Daftar input-output, pernyataan NILAI VEKTOR, dan beberapa subrutin memungkinkan penggunaan notasi blok, yang memiliki bentuk A,...,B atau A... B, yang merupakan referensi ke seluruh wilayah dari A ke B. inklusif. Dalam hal vektor, A (1) ... A(N) akan menjadi A(1), A(2), A(3), ..., A(N).
- Ada fasilitas yang memungkinkan perubahan dimensi saat run-time; memungkinkan programmer untuk memvariasikan lokasi elemen awal dalam array dalam blok keseluruhan yang telah disisihkan untuk array; dan memungkinkan pemetaan penyimpanan sewenang-wenang ditentukan.
Daftar operators, statements, and functions
Operators
Arithmetic operators
- .ABS. (unary absolute value)
- + (unary identity)
- - (unary negation)
- + (addition)
- - (subtraction)
- * (multiplication)
- / (division)
- .P. (exponentiation)
- .N. (bitwise negation)
- .A. (bitwise and)
- .V. (bitwise or)
- .EV. (bitwise exclusive or)
- .LS. (left shift)
- .RS. (right shift)
- .REM. (remainder, GOM only)
Relational operators
- .L. (less than)
- .LE. (less than or equal)
- .E. (equal)
- .NE. (not equal)
- .G. (greater than)
- .GE. (greater than or equal)
Boolean operators
.NOT. (unary logical not)
.OR. (logical or)
.EXOR. (logical exclusive or)
.AND. (logical and)
.THEN. (implies)
.EQV. (equivalence)
Pointer operators (Hanya GOM)
- : (selection)
- .LOC. (location)
- .IND. (indirection)
Bit operators (Hanya GOM)
- .SETBIT. (set bit to 1)
- .RESETBIT. (reset bit to 0)
- .BIT. (test bit)
Declaratrion Statement
Variabel dapat dinyatakan secara implisit atau eksplisit. Secara default, semua variabel yang dideklarasikan secara implisit diasumsikan sebagai floating point. Pernyataan NORMAL MODE IS dapat digunakan untuk mengubah default ini.
- FLOATING POINT var1, var2, ... (may include dimension information)
- INTEGER var1, var2, ... (may include dimension information)
- BOOLEAN var1, var2, ... (may include dimension information)
- FUNCTION NAME name1, name2, ... (may include dimension information)
- STATEMENT LABEL label1, label2, ... (may include dimension information)
- MODE NUMBER n, var1, var2, ... (may include dimension information)
- NORMAL MODE IS type-name (INTEGER, BOOLEAN, FLOATING POINT, STATEMENT LABEL, or FUNCTION NAME)
- NORMAL MODE IS MODE NUMBER n
- DIMENSION variable(max-dimension) (declares an array from 0...max-dimension)
- DIMENSION variable(from...to)
- DIMENSION variable(subscript1, subscript2, ..., subscriptn) (declares a multidimensional array)
- VECTOR VALUES array(n) = c1, c2, c3, ...
- VECTOR VALUES array(m) ... array(n) = constant
- DOUBLE STORAGE MODE mode-list (doubles the amount of storage allocated for the modes listed)
- EQUIVALENCE (a1, a2, ..., am), ...
- PROGRAM COMMON a, b, c, ... (may include dimension information)
- ERASABLE a, b, c, ... (may include dimension information)
- PARAMETER A1(B1), A2(B2), ..., An(Bn)
- SYMBOL TABLE VECTOR variable
- FULL SYMBOL TABLE VECTOR variable
- LISTING ON (the default)
- LISTING OFF
- REFERENCES ON
- REFERENCES OFF (the default)
Executable Statements
- Variable = expression (assignment)
- TRANSFER TO statement-label
- WHENEVER boolean-expression, executable-statement (simple conditional)
- WHENEVER boolean-expression (compound conditional)
- OR WHENEVER boolean-expression
- OTHERWISE
- END OF CONDITIONAL
- CONTINUE (do nothing statement, usually used to carry a statement label)
- THROUGH statement-label, FOR VALUES OF variable = expression-list (iteration)
- (where variable may be any mode including floating-point)
- SET LIST TO array-element, [ expression ]
- SAVE DATA list
- RESTORE DATA list
- PAUSE NO. octal-integer (stop execution, print an octal number on the operators console, allow manual restart)
- END OF PROGRAM (the last statement in all MAD programs)
Input dan Output Statements
- READ DATA (reads data using a self-defining format, var1=value1, var2=value2, ..., varN=valueN
- READ AND PRINT DATA (similar to READ DATA, but data read is echoed to the printer)
- READ FORMAT format, list
- READ BCD TAPE n, format, list
- READ BINARY TAPE n, list
- PRINT RESULTS list
- PRINT BCD RESULTS list
- PRINT OCTAL RESULTS list
- PRINT COMMENT $string$ (first character of string is carriage control)
- PRINT FORMAT format, list
- PRINT ON LINE FORMAT format, list (display a message for the machine operator)
- WRITE BCD TAPE n, format, list
- WRITE BINARY TAPE n, list
- PUNCH FORMAT format, list
- LOOK AT FORMAT format, list (read data without advancing to next record)
- REWIND TAPE n
- END OF FILE TAPE n
- BACKSPACE RECORD OF TAPE n
- BACKSPACE RECORD OF TAPE n, IF LOAD POINT TRANSFER TO statement
- BACKSPACE FILE OF TAPE n
- BACKSPACE FILE OF TAPE n, IF LOAD POINT TRANSFER TO statement
- SET LOW DENSITY TAPE n
- SET HIGH DENSITY TABLE n
- REWIND TAPE n
- UNLOAD TAPE n
- FORMAT VARIABLE list (declaration, may include dimension information)
Function
Nama fungsi diakhiri dengan titik. Fungsi internal dan eksternal didukung. Fungsi internal dikompilasi sebagai bagian dari program di mana mereka digunakan dan berbagi deklarasi dan variabel dengan program utama. Fungsi eksternal dikompilasi secara terpisah dan tidak berbagi deklarasi dan variabel. Definisi satu pernyataan fungsi internal diizinkan. Fungsi rekursif diizinkan, meskipun fungsi tersebut harus melakukan beberapa pekerjaan penyimpanan dan pemulihan yang diperlukan itu sendiri.
- INTERNAL FUNCTION function-name.(argument-list) = expression (single statement definition)
- INTERNAL FUNCTION function-name.(argument-list)
- EXTERNAL FUNCTION function-name.(argument-list)
- ENTRY TO NAME name.
- END OF FUNCTION (last statement in a multiple line definition)
- FUNCTION RETURN [ expression ]
- ERROR RETURN (force an error return to a statement or to the operating system, if no error statement is given as last argument of the call)
- SAVE RETURN
- RESTORE DATA
- RESTORE RETURN
- EXECUTE procedure.(argument-list) (call a non-single valued function)
0 Comments
Komentar akan dimoderasi terlebih dahulu untuk sementara karena ada beberapa komentar yg mengandung spam porno. Jadi komentar tidak akan langsung muncul sebelum disetujui.
Dilarang berkomentar yang mengandung porno, judi, spam, rasis, promosi iklan dan sara.
Form komentar akan di nonaktifkan setelah komentar mencapai 30 komentar lebih.