MAD语言

科技工作者之家  |   2020-11-17 18:18

MAD(Michigan Algorithm Decoder)是用于IBM 704和后来的IBM 709,IBM 7090,IBM 7040,UNIVAC 1107,UNIVAC 1108,Philco 210-211以及最终IBM S / 370大型计算机的编程语言和编译器。 MAD于1959年在密歇根大学由Bernard Galler,Bruce Arden和Robert M. Graham开发,是ALGOL语言的变种。 它在20世纪60年代被广泛用于高校教学编程,并在CTSS,Multics和密歇根终端系统计算机操作系统的开发中发挥了次要作用。

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从未将其扩展到广泛使用1。

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.有些设施可以在运行时改变尺寸; 允许程序员在已经为阵列预留的整个块内改变数组中初始元素的位置; 并允许指定任意的存储映射。

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学