ماد (لغة برمجة)

MAD (اختصارًا لِـ**مفسِّر خوارزميَّة ميشيغان**) (Michigan Algorithm Decoder), هي لغة برمجة ومترجم مطور في جامعة ميشيغان  بواسطة برنار غالير وبروس أردن بروس وروبرت جراهام University of Michigan by Bernard Galler, Bruce Arden، Robert M. Graham.

## MAD/Iو MADو GOM

هناك ثلاثة تراجم لـ MAD :
1. MAD الأصلي المترجم كشف عنه في عام 1959 في جامعة ميشيغان لكمبيوتر آي بي إم 704 IBM 704و في وقت لاحق آي بي إم 709 IBM 709 وأجهزة الكمبيوتر المركزية وآي بي إم 7090 IBM 7090 mainframe من النظام التنفيذي لجامعة ميتشيغان (UMES) وأنظمة تشغيل  النظام المناسب لتقسيم الوقت (CTSS).. وفي منتصف الستينات 1960.لغة MAD استدارت في جامعة ميريلاند University of Maryland ليونيفاك 1108UNIVAC 1108. إصدارات MAD كانت متوفرة أيضا لفيلكو 210-211 Philco ويونيفاك 1107  UNIVAC 1107.

2. MAD/I، هو إصدار مطول من MAD لسلسلة S/360 آي بي إم IBM S/360 من أجهزة الكمبيوتر التي تعمل في منظومة محطة ميشيغان Michigan Terminal System (MTS). بدأ العمل في المترجم الجديد في عام 1965 كجزء من وكالة مشاريع البحوث المتقدمة ARPA برعاية مشروع CONCOMP في جامعة ميشيغان. عندما أحرز العمل تقدما أصبح تدريجيا واضحا أنI /MAD كانت لغة جديدة مستقلة عن الإصدار الأصلي من 7090  MAD.

3. جوم GOM(ماد القديم الجيد) (Good Old MAD)، وإعادة تطبيق لـ 7090 MAD الأصلي لسلسلة آي بي إم S/370 IBM S/370 series لأجهزة الكمبيوتر المركزية لتشغيل نظام محطة ميتشيغان Michigan Terminal System (MTS). تم إنشاء جوم GOM في أوائل الثمانينات 1980 بواسطة دون بوتنر Don Boettner في مركز الحاسب الآلي بجامعة ميشيغان.

## التاريخ
MAD هي بديل للغة الدولية الخوارزمية (اللوغرتمية) International algorithmic language (IAL). IAL هو الاسم الأصلي لماذا أصبحت في نهاية المطاف ALGOL 58. في حين MAD كانت بدافع من ALGOL 58، إلى انها لا تشبه ALGOL 58 بأي شكل من الأشكال كبيرة.

البرامج المكتوبة بلغة MAD بما فيها MAIL RUNOFF، واحدة من النظم الأولى لمعالجة النصوص، والعديد من أدوات المساعدة الأخرى كلها تحت النظام المناسب لتقسيم الوقت Compatible Time-Sharing System (CTSS). جرى العمل على التصميم لمترجم MAD لمالتيكس Multics، ولكن لم ينفذ.

وفيما يلي اقتباس من مقابلة مثيرة للاهتمام مع بريان كيرنيغان  عندما سئل: «ما سبب تعلقك بالبرمجة؟»:
أجاب: أعتقد أن الأكثر متعة أني كنت اعمل بالبرمجة كوظيفة صيفية في مشروع ماك MAC في ميت MIT في صيف عام 1966، حيث عملت على إنشاء برنامج لشريط عمل لجي إي645 الجديد GE 645 في الأيام الأولى من مالتيكس Multics. كنت أكتب بلغة MAD، والتي كانت أسهل بكثير وأكثر متعة من فورتران FORTRAN وكوبول COBOL التي كنت كتبتها في وقت سابق، وكنت أستخدم CTSS، أول نظام اقتسام الوقت، والتي كان من الأسهل بلا حدود وأكثر متعة من البطاقات المثقبة punch cards.

MAD كانت سريعة جدا مقارنة ببعض برامج المترجم الأخرى في وقته. وبسبب أن كثير من الناس كانت مهتمة باستخدام لغة فورتران FORTRAN وأرادت الحصول على سرعة مترجم MAD، تم استحداث نظام مادتران MADTRAN (كتب بلغة MAD). وكان MADTRAN مجرد مترجم من فورتران FORTRAN إلى ماد MAD، والتي أنتجت وقتها شفرات ألية. ووزعت MADTRAN من خلال SHARE.

MAD/I لديها بنية لغوية مماثلة لـ ALGOL 60 مع مميزات مهمة من MAD الأصلي ومن PL/I. MAD/I مصمم كلغة موسعة. وكانت متوفرة للاستخدام في MTS، وقدمت العديد من الأفكار الجديدة التي شقت طريقها إلى لغات أخرى، ولكن مصنفات MAD/I كانت بطيئة وMAD/I لم تمدد نفسها إلى استخدام واسع النطاق بالمقارنة مع 7090 MAD الأصلي.

جوم GOM هي أساسا لغة MAD 7090 والتي مددت وتعدلت لبناء الحاسب 360/370 مع بعض الحياكة بحكمة لتتناسب مع أفضل ممارسات البرمجة والمشاكل الراهنة. ونظام رسائل MTS كان مكتوباً بجوم.

## MAD ومجلة MAD ووألفريد نومان Alfred E. Neuman
 
خط طابعة المخرجات يتبع خطأ مترجم MAD على جهاز كمبيوتر آي بي إم 704 في جامعة ميشيغان، C. 1960
في إصدار ما قبل MAD الأصلي، وإشارة إلى أنها تحمل الاسم نفسه MAD، مجلة MAD MAD magazine، عندما كان البرنامج به أخطاء وقت الترجمة كثيرة المترجم كان يطبع الصورة على ورقة كاملة لألفريد E. نومان Alfred E. Neuman باستخدام فنASCII art. العنوان للقراءة، «انظر هذا الرجل حول البرنامج الخاص بك -- قد يرغب في نشرها –لا يخاف أبدا -- ولكن من ينظر إلى البرنامج الخاص بك، يجب عليك» هذه الميزة لم تكن مدرجة في النسخة الرسمية النهائية

ويتذكر بيرني غلر Bernie Galler :
«في الوقت الذي قمنا فيه بتصميم اللغة التي اعتقدنا انها سوف تستحق القيام بها والتي تمكننا من عمل مترجم، لم نستطيع ان نسميها ALGOL، كانj حقا مختلفة. وذلك عندما اعتمدنا الاسم MAD، لجهاز فك الشفرة الخوارزمية ميشيغان. كان لدينا بعض ردود الفعل المضحكة مع مجلة ماد للناس، وعندما طلبنا للحصول على إذن لاستخدام اسم MAD. في رسالة مضحكة جدا، وقالوا لنا أنهم سوف يأخذونا للمحكمة وكل شيء آخر، ولكن انتهى التهديد مع ملاحظة في أسفل --» بالتأكيد، أمضوا قدما. «للأسف، فقدت تلك الرسالة».

## مثالا «مرحبا بالعالم» "hello, world"
في «مرحبا العالم»"hello, world" البرنامج يطبع سلسلة «مرحبا بالعالم» "hello, world" إلى النهاية الطرفية لشاشة العرض.
 PRINT FORMAT HELLOW
 VECTOR VALUES HELLOW=$13h0Hello, world*$
 END OF PROGRAM

يتم التعامل مع الحرف الأول من السطر ك حرف التحكم المنطقي، في هذا المثال حرف الصفر الذي يؤدي إلى طباعة خط مزدوج متباعد.
أو، في حالة ادخال كل الكلمات الرئيسية في المثقبة بلوحة المفاتيح الخاص بك هو عمل كثير، يمكنك استخدام تقلصات والمترجم يقوم بتوسيعها في العرض:
 P'T HELLOW
 V'S HELLOW=$13h0Hello, world*$
 E'M

## عناصر اللغة

وتتألف MAD وجوم GOM، ولكن ليس MAD/I، من العناصر التالية:

### نسق المدخلات
برامج MAD هي سلسلة من بيانات مكتوبة على بطاقات مثقبة، في الغالب عبارة واحد للبطاقة الواحدة، رغم أنه يمكن ان تستكمل العبارة في بطاقات متعددة.
* الأعمدة من1 إلى 10 تحتوي على تسمية عبارة اختيارية
* العمود 11 هو العمود الملاحظة واستمرار
* أعمدة 73و80 غير مستخدمة، ويمكن أن تحتوي على محدد التسلسل

البطاقة الأولى للعبارة فارغة أو ليس لها ثقب في البطاقة في العمود 11 وبطاقات الاستمرار تحتوي على الأرقام 0 إلى 9 في العمود 11. يتم وضع علامة على التعليقات أو الملاحظات باستخدام حرف "R" في العمود 11.

مجموعة الأحرف المعتمد عليها تتضمن الأحرف الكبيرة من Aالى Z، والأرقام من 0الى9، والعلامات، (فاصلة)، + (زائد) -- (ناقص)، '(الفاصلة العليا)، =، *، /، (،)،&، وفارغة أو مسافة. ولكن لا يدعم الاحرف الصغيرة و"(اقتباس مزدوج).

المساحات ليست مهمة في أي مكان بخلاف ما ضمن ثوابت الحرف.

كلمات رئيسية قليلة في اللغة محجوزة لأن معظم الكلمات أطول من ستة أحرف أو محاطة بفترات. هناك معيار مجموعة من الاختصارات التي يمكن استخدامها لتحل محل الكلمات الطويلة. وتتألف هذه المجموعة من الأحرف الأولى والأخيرة من الكلمات الرئيسية مع الفاصلة العليا بينهما، مثل لW'R لكلمة WHENEVER و D'Nلكلمة DIMENSION.

بالنسبة إلى جوم GOM :
* الإدخال هو شكل حر،
* ليس هناك مجال متسلسل،
* خطوط الإدخال قد يصل طولها إلى 255 حرفا،
* الخطوط التي تبدأ بنجمة (*) هي التعليقات،
* الخطوط التي تبدأ بتسجيل زائد (+) هي خطوط استمرار،
* الخطوط التي تبدأ بالأحرف (A-Z) لها تسمية عبارة تواصل لأول حرف فارغ، * العبارات المتعددة مفصولة ب الفاصلة المنقوطة (;) قد توضع على خط
* الأحرف "1" (صفحة جديدة)، "-" (ثالث مسافات)، و"0" (مسافتين) في العمود 1 يسيطر على تباعد سرد مصدر،
رسم خط تحت (_) وعلامة الاقتباس المزدوجة (") يتم إضافتها
قد يشمل الإدخال الحروف الكبيرة والصغيرة، ولكن الصغيرة يتم تجاهلا إلا في ثوابت الحرف.

### أنواع البيانات

MAD يستخدم مصطلح "mode" لأنواع البيانات الخاصة به. ويدعم خمس طرق أساسية:
# الأعداد الصحيحة (من 9,999,999,999 - إلى 9,999,999,999+)
## ثوابت اللأعداد الصحيحة (1, +1, -1)
## الثوابت الثمانى (ل7777777777777الف)
## تعامل على أنها أعداد صحيحة، وتكتب مع أو بدون عامل قياس (1K10, 1K)
## الثوابت الأبجدية أو الأحرف (من1 إلى 6 أحرف محددة باستخدام علامة الدولار ($ABCDEF$)، يتم استخدام علامة الدولار المزدوج تستخدم لإدخال علامة الدولار الحقيقية ($$$.56$ هي 56 سنتات).
## تعامل على أنها صحيحة، مخزنة منحنية إلى الأيسر ومحشوة في اليمين من 0 حتي 5 فراغات.
# النقطة العائمة (10−38 to 1038)
## تكتب بنقطة عشرية بدون الأس (0., 1.5, -0.05, +100.4, -4.) ;
## تكتب بالأس بدون النقطة العشرية (.05E-2, -.05E2, 5E02, 5.E2)
# القيم المنطقية (1B للحقيقية و0B للخطأ)
# بيان (عبارة) العلامة
# اسم الوظيفة
## تكتب اسم ويليه نقطة (SQRT.)، حيث أن الأسماء هي من واحد إلى ستة أحرف أبجدية أو الأرقام العشرية الطويلة ويجب أن تبدأ بحرف أبجدي.

السلسلة التي تطول عن ستة أحرف قد تكون ممثلة باستخدام المصفوفات.
النمط الثابت ويمكن إعادة تحديده بإضافة حرف M يليه رقم واحد في نهاية الثابت، حيث يشير 0 إلى نقطة عائمة، 1 صحيحا، 2 منطقياً، 3 اسم الوظيفة، 4 بيان (التسمية) العالمة.

قوائم المدخلات والمخرجات وعبارات القيم المتجهة VECTOR VALUES وبعض الوظائف الفرعية تسمح باستخدام كتل الرموز، والذي لها شكل A,...,B أو A...B, وهو إشارة إلى المنطقة بأكملها من A إلى B، شاملة. حسب وجهة vector، فإن A(1)...A(N) يكون A(1), A(2), A(3),..., A(N).
 
بالنسبة لجوم GOM :
* الكلمات ذات الـ 4 بايت تم استخدامها لخمس صيغ أصلية؛
* ستة صيغ يتم إضافتها: حرف، عدد صحيح قصيرة، بايت عدد صحيح، عدد صحيح طويل، المؤشر، وسجل ديناميكي؛ CHARACTERو SHORT INTEGERو BYTE INTEGERو LONG INTEGER, POINTERو DYNAMIC RECORD
* الثوابت قد تكون مؤهلة بإلحاق للعلامة آت (@) متبوعة بحرف واحد أو أكثر: @X (عشري)، @Ln (طول بايت n)، @Mn (واسطة n)، @F أو @FT (نقطة عائمة)، @I or @IR (عدد صحيح)، @BN (منطقية)، @ @Cأو @CH, أو @CR (حرف)،@SIأو @SR, أو @H (عدد صحيح قصيرة)، @BI أو @BR (عدد صحيح البايت)، @LI أو @LR (عدد صحيح طويل)، و@P (مؤشر)؛
* الأحرف الثوابت قد تكون محددة باستخدام إما علامة الدولار ($) أو فاصلة الاقتباس المزدوجة (")
* المتغيرات الغير مهيأة مسبقا ليست معدة لتكون قيمة معروفة.

### الأسماء

* أسماء المتغيرات وأسماء الوظائف، وبيان عبارات التسميات، لها نفس الشكل حرف يليه من صفر إلى خمس أحرف أو أرقام. أسماء الوظائف تنتهي بنقطة.
* نفس الاسم لا يمكن استخدامه لأكثر من غرض واحد.
* كل الأسماء يمكن كتابتها سفليا (الاسم متبوعا بأقواس، مع الحروف السفلية المتعددة والمفصولة بفواصل (,)). لا يوجد حد لعدد الاحرف السفلية.

بالنسبة لجوم GOM :
* الأسماء قد يصل طولها إلى 24 حرفا،
* اأسماء قد تتضمن علامة السطر السفلى (_).

### المصفوفات

* المصفوفات ذات البعد الواحد تسمى vectors والمصفوفات ذات الأبعاد المتعددة matrices.
* المصفوفات يجب أن تكون مصرحة باستخدام عبارة البعد، عن طريق ادراج معلومات البعد على عبراة تصريح أخرى، أو يمكن أن يكون مصرح ضمنا باستخدام عبارة VECTOR VALUES.
* يسمح للأحرف السفلية السلبية والصفر.
* مصفوفات Matrices يمكن الرجوع إليها باستخدام حرف سفلى لكل بعد، الاسم (s1,s2,s3)، أو باستخدام حرف واحد سفلى، الاسم (s1).
* مصفوفات Matricesهى طوابق في مواقع الذاكرة المتتالية وفقا للترتيب الذي تحدده تنوع الأحرف المنخفضة أقصى اليمين أولاً.
* وهناك تسهيلات تسمح بتغيير الأبعاد في وقت التشغيل؛ يسمح للمبرمج بتغيير موقع العنصر الأولي في المصفوفة داخل الكتلة الشاملة التي وضعت جانبا للمصفوفة، والسماح بتخزين الخرائط التعسفى أن يكون محدد.

في جوم GOM مصفوفات الأحرف يمكن الرجوع إليها باستخدام الترميز التالي:
** مصفوفة (أول... آخر)
** مصفوفة (... آخر)
** مصفوفة (أول...)
** مصفوفة (...)
** مجموعة س (الأولى | الطول)

### المشغلين
العوامل الحسابية
* ABS. (أحادي القيمة المطلقة)
* + (هوية أحادي)
* - (نفي أحادي)
* + (إضافة)
* - (الطرح)
* * (الضرب)
* / (قسمة)
* P. (الأسي)
* N. (تمثل إنكار)
A*. (وتمثل)
V* (تمثل أو)
* EV. (أو تمثل أو حصرية)
* LS. (التحول إلى اليسار)
* RS. (التحول إلى اليمين)
* REM. (الباقي، جوم فقط)
مشغلي المؤشر (جوم فقط)
* : (اختيار)
* LAC. (موقع)
* IND. (مراوغة)

العوامل الترابطية
* L. (أقل من)
* LE. (أقل من أو يساوي)
* E (يساوي)
* NE. (لا يساوي)
* G. (أكبر من)
* GE. (أكبر من أو يساوي)
العوامل المنطقية
* NOT. (لا أحادية منطقية)
* OR. (أو منطقية)
* EXOR. (المنطقية الخالصة أو)
* AND. (و منطقية)
* THEN. (يعني ضمنا)
* EQV. (التعادل)
تمشغلين بت BIT (جوم فقط)
* SETBIT. (حدد بت إلى 1)
* RESETBIT. (إعادة تحديد بت إلى 0)
* BIT. (بت اختبار)
التعبيرات

تعبيرات العدد الصحيح، النقطة العائمة، والتعبيرات المنطقية. متوفرة والعدد الصحيح ومتغيرات النقطة العائمة والثوابت يمكن أن تجمع في تعبير واحد مع النقطة العائمة كنتيجة (قد يتم تنفيذ أجزاء من هذا الحساب باستخدام عدد حسابى صحيح والنتيجة النهائية قد تختلف عن تلك التي تم الحساب ككل بالنقطة العائمة).

الجانبين الأيسر والأيمن من المهمة لابد أن يكونان من نفس النوع، عدا عبارات العدد الصحيح أو النقطة العائمة على اليمين سوف يتم تحويلها لعبارات نقطة عائمة أو عدد صحيح إالى اليسار إذا لزم الأمر.

عبارات التصريح

المتغيرات قد تكون مصرحة ضمنا أو صراحة.من المفترض أن المتغيرات المصرح بها ضمناً يفترض أن تكون نقطة عائمة. الوضع الطبيعي NORMAL MODE هو عبارة قد تستخدم لتغيير المفترض هذا.
* النقطة العائمة var1، var2 ... (قد تشمل معلومات البعد)
* العدد الصحيح var1، var2 ... (قد تشمل معلومات البعد)
* المنطقية var1، var2 ... (قد تشمل معلومات البعد)
* اسم الوظيفة name1، name2 ... (قد تشمل معلومات البعد)
* بيان عبارة التسمية label1, label2,... (قد تشمل معلومات البعد)
* وضع الرقم n، var1، var2 ... (قد تشمل معلومات البعد)
* الوضع العادي هو نوع اسم (عدد صحيح أو منطقي أونقطة عائمة أو عبارة التسمية أو اسم الوظيفة)
* الوضع العادي هو وضع رقم n
* البعد المتغير (max-dimension) (يظهر مصفوفة من 0... البعد -الأقصى)
* البعد المتغير (from...to) (من... إلى)
* البعد المتغير (subscript1, subscript2,..., subscriptn) (الحرف السفلى 1، الحرف السفى 2... الحرف السفلى n) (يظهر مصفوفة متعددة الأبعاد)
* مصفوفة القيم المتجهة (n) VECTOR VALUES array = c1, c2, c3,...
* مصفوفة القيم المتجهة (n) array (m) VECTOR VALUES array = ثابت
* الوضع المزدوج التخزين قائمة الأوضاع (ضعف كمية التخزين المخصصة للأوضاع المذكورة)
* التعادل (a1, a2,..., am)
* البرنامج المشترك a, b, c,... (قد تشمل معلومات البعد)
* القابل للمسح a, b, c,... (قد تشمل معلومات البعد)
* العامل A1 ), A2(B2),..., An(Bn)
* جدول الرموز المتجه المتغير SYMBOL TABLE VECTOR variable
* جدول الرموز المتجه المتغيرالكامل Full SYMBOL TABLE VECTOR variable
* الإدراج في (الوضع الافتراضي)
* خارج الإدراج
* إدراج المراجع
* المراجع خارج القائمة (الوضع الافتراضي)

عبارات قابلة للتنفيذ
variable* متغير = التعبير (مهمة)
* TRANSFER TO (أنقل إلى) عبارة - التسمية
WHENEVER* (أي مكان) عبارة منطقية، وتعبير قابل للتنفيذ (شرطى بسيط بسيطة)
* WHENEVER (أي مكان) عبارة منطقية، (مركب شرطى)
* OR WHENEVER (أو أي وقت) عبارة منطقية
* OTHERWISE (غير ذلك) يا منطقية كلما أو التعبير عن
* END OF CONDITIONALنهاية مشروطة
CONTINUE* (استمرار) (عبارة فعل لا شيء، عادة ما تستخدم لحمل تسمية البيان)
* THROUGH (من خلال) بيان التسمية، للقيم المتغيرة = قائمة العبارات (التكرار)
* SET LIST TO (إعداد القائمة إلى) مصفوفة عناصر، [العبارات]
SAVE DATA list* قائمة حفظ البيانات
* RESTORE DATA list قائمة استعادة البيانات
* PAUSE NO (لا وقوف) عدد ثمانى صحيح (وقف التنفيذ، وطباعة رقم ثماني على مشغل وحدة التحكم، والسماح إعادة التشغيل يدويا)
* END OF PROGRAM (انتهاء البرنامج) (العبارة الأخيرة في جميع البرامج MAD)
عبارات المدخلات والمخرجات
* READ DATA (قراءة البيانات باستخدام تحديد التنسيق الذاتي، var1=value1, var2=value2,..., varN=valueN
* READ AND PRINT DATA (مشابهة لقراءة البيانات، ولكن قراءة البيانات هو صدى للطابعة)
* READ FORMAT (اقرأ التنسيق) تنسيق، القائمة
* READ BCD TAPE n (أقراء الشريط ترميز عشري ثنائى)، تنسيق، القائمة
* READ BINARY TAPE n (أقراء الشريط الثنائى n)، القائمة
* PRINT RESULTS (اطبع النتائج) القائمة
* PRINT BCD RESULTS (اطبع نتائج بترميز عشري ثنائى) القائمة
* PRINT OCTAL RESULTS (اطبع نتائج الثمانى) القائمة
* PRINT COMMENT $string$ (اطبع التعليق) (الحرف الأول من السلسلة يتحكم بالنقل)
* PRINT FORMAT (اطبع التنسيق) القائمة
* PRINT ON LINE FORMAT (اطبع على شكل خط التنسيق)، القائمة (عرض رسالة لمشغل الآلة)
* WRITE BCD TAPE (اكتب الشريط بترميز عشري ثنائى)، تنسيق، القائمة
* WRITE BINARY TAPE (اكتب الشريط ثنائي)، القائمة
* PUNCH FORMAT قائمة (تنسيق التثقيب)، * LOOK AT FORMAT (انظر إلى التنسيق) القائمة (اقرأ البيانات دون التقدم إلى السجل التالي)
* 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 (تنسيق المتغير) (الإظهار، قد يتضمن معلومات البعد)

الوظائف

الوظائف الداخلية والخارجية معتمدة. يتم تصنيف الوظائف الداخلية كجزء من البرنامج الذي تستخدم فيه ويقتسموا الإعلان والمتغيرات مع البرنامج الرئيسي. الوظائف الخارجية يتم ترجمتها بشكل منفصل ولا تقتسم الإعلانات والمتغيرات.
 
أسماء الوظائف تنتهي بنقطة. الوظائف ذات القيمة الواحدة تسمى عندما يتم الرجوع إليها باسم تسمى كجزء من مصطلح، بينما الوظائف الغير أحادية القيمة (إجراءات) تسمى باستخدام العبارة EXECUTE (تنفيذ).

الوظائف تمرر المتحولات بالقيمة. المتحولات يمكن ان تكون مصطلحات وعبارات العلامات والأسماء الوظائف.

يسمح لتعريف الوظيفة الداخلية باستخدام عبارة واحدة للتعريف.

الوظائف المتداخلة أو المتتالية مسموح بها، على الرغم من أن الوظيفة يجب أن تقوم بعمل الحفظ المطلوب ومعاودة العمل من تلقاء نفسها نفعل.
* INTERNAL FUNCTION (الوظيفة الداخلية) اسم الوظيفة (قائمة المتحولات) = المصطلح (عبارة واحد للتعريف)
* INTERNAL FUNCTION (الوظيفة الداخلية) اسم الوظيفة (قائمة المتحولات)
* EXTERNAL FUNCTION (الوظيفة الخارجية) اسم الوظيفة (قائمة المتحولات)
* ENTRY TO NAME (إدخال اسم) اسم.
* END OF FUNCTION (انتهاء الوظيفة) (العبارة الأخيرة في تعريف الخط المتعدد)
* FUNCTION RETURN (إعادة الوظيفة) [المصطلح]
* ERROR RETURN (عودة الخطأ) (تجبر على عودة الخطأ إلى العبارة أو إلى نظام التشغيل، في حال عدم إعطاء أي عبارة يرجع الها عند الخطأ كأخر وسيط للاستدعاء)
* SAVE RETURN (حفظ العودة)
* RESTORE DATA (استعادة البيانات)
* RESTORE RETURN (استعادة العودة)
* EXECUTE إجراء (التنفيذ) (قائمة المتحولات) (استدعاء وظيفة غير أحادية القيمة)

مشغل التعريف وإعادة التعريف

أحد السمات الأكثر إثارة للاهتمام في MAD هو القدرة على تمديد اللغة من خلال إعادة تعريف المشغلين القائمين، وتحديد مشغلين جدد، أو تحديد أنواع بيانات جديدة (أوضاع). التعريفات مصنوعة باستخدام عبارات إعلان MAD ولغة التجميع mnemonics (الاستذكار) تشمل اتباع الإعلان حتى النهاية END التعليمة - الزائفة التي تنفذ العملية.
* DEFINE BINARY OPERATOR defined-op, PRECEDENCE rank existing-op MODE STRUCTURE mode-options (تحديد مشغل ثنائي، أسبقية، تركيبة وضع التشغيل) حدد مشغل ثنائى بأسبقية المرتبة باختيار تركيبة وضع التشغيل
* DEFINE UNARY OPERATOR defined-op, PRECEDENCE rank existing-op MODE STRUCTURE mode-options (تحديد مشغل أحادي، أسبقية، تركيبة وضع التشغيل) حدد مشغل أحادي بأسبقية المرتبة باختيار تركيبة وضع التشغيل
* MODE STRUCTURE mode-no = mode-no existing-op mode-no (تركيب الوضع)
* MODE STRUCTURE mode-no = mode-no existing-op mode-no (تركيب الوضع) SAME SEQUENCE AS mode-no existing-op mode-no (نفس التسلسل)

حيث:
* Rank الرتبة هي واحدة من على النحو نفسه SAME AS، أقل من LOWER THAN، أو أعلى من HIGHER THAN
* خيارات الوضع، هي الخيارات التي تظهر على عبارة تركيبة الوضع MODE STRUCTURE.

ثلاث باقات من التعاريف محددة مسبقا (ماتريكس MATRIX، الدقة المزدوجة DOUBLE PRECISION، ومعقدة COMPLEX) متاحة للإدراج في مصدر برامج MAD باستخدام عبارة الادراج INCLUDE.
 
* INCLUDE إدراج الحزمة

## مراجع

* *An Abbreviated description of the MAD compiler language*, Fernando J. Corbató, Jerome H. Saltzer, Neil Barta, and Thomas N. Hastings, M.I.T. Computation Center Memorandum CC-213, June, 1963.
* Bernie Galler talks "a little about the history of MAD"
* *CLSYS, a program to facilitate the use of the MAD translator for large (class-size) batches*, Jerome H. Saltzer, M.I.T. Computation Center Memorandum CC-204. February, 1963.
* *A Computer Primer for the Mad Language*, Elliott Irving Organick, 1961.
* ''Internal organization of the MAD translator'', Arden, B. W., Galler, B. A. and Graham, R. M., pp.&nbsp;28–31, CACM Volume 4 No. 1 (Jan 1961)
* *An Introduction To Algorithmic Methods Using The MAD Language*, Alan B. Marcovitz and Earl J. Schweppe, Macmillan, 1966.
* ''An Introduction to Digital Computers and the MAD Language'', Brice Carnahan, University of Michigan.
* ''The Language of Computers'', Bernard A. Galler, University of Michigan, McGraw-Hill, 1962.
* ''MAD at Michigan: its function & features'', Arden, B. W., Galler, B. A., and Graham, R. M., pp27–28, Datamation, Volume 7 No. 12 (Dec 1961)
* The archives at the Bentley Historical Library of the University of Michigan contain reference materials on the development of MAD and MAD/I, including three linear feet of printouts with hand-written notations and original printed manuals.

## وصلات خارجية
* Eric Raymond's retrocompiler for MAD
* A trivial example of a MAD program
* Dave Pitts' IBM 7094 support – Has a CTSS environment that includes the MIT version of MAD.

تصنيف:لغات برمجة أنشئت في 1959
تصنيف:لغات برمجة إجرائية