ميتا 2
ميتا 2 هي لغة برمجة متخصصة في مجال معين لكتابة المترجمات . تم تطويرها في الفترة ما بين عامي 1963 و1964 على يد ديوي فال شور في جامعة كاليفورنيا، لوس أنجلوس (UCLA). تستخدم ميتا 2 ما أسماه شور " معادلات بناء الجملة" . ويمكن شرح طريقة عملها ببساطة كما يلي:
تُترجم كل معادلة نحوية إلى روتين فرعي متكرر يختبر سلسلة الإدخال بحثًا عن بنية عبارة معينة، ويحذفها إذا تم العثور عليها. [ 1 ]
تُترجم برامج Meta II إلى لغة بايت كود مُفسَّرة . كُتبت مُترجمات VALGOL وSMALGOL، التي تُوضِّح إمكانياتها، بلغة META II، [ 1 ] [ 2 ] VALGOL هي لغة جبرية بسيطة صُمِّمت لغرض توضيح META II. كانت SMALGOL مجموعة فرعية كبيرة نسبيًا من ALGOL 60 .
الترميز
كُتبت لغة META II لأول مرة بلغة META I، [ 3 ] وهي نسخة مُجمّعة يدويًا من META II. ولا يزال تاريخها غير واضح فيما إذا كانت META I تطبيقًا كاملاً للغة META II أم أنها مجموعة فرعية مطلوبة من لغة META II اللازمة لتجميع مُجمّع META II الكامل.
في وثائقها، وُصفت لغة META II بأنها تُشبه صيغة باكوس-ناور (BNF)، والتي تُفسَّر اليوم على أنها قواعد إنتاجية. META II هي قواعد تحليلية. في وثيقة TREE-META ، وُصفت هذه اللغات بأنها قواعد اختزالية.
على سبيل المثال، في صيغة BNF، يمكن تعريف التعبير الحسابي على النحو التالي:
<expr> : = <term> | <expr> <addop> <term>قواعد BNF هي اليوم قواعد إنتاجية تصف كيفية تجميع الأجزاء المكونة لتكوين بنى لغوية صالحة فقط. يقوم المحلل اللغوي بالعكس، حيث يحلل البنى اللغوية. META II هي لغة برمجة تعتمد على محلل وظيفي قائم على المكدس، وتتضمن توجيهًا للإخراج. في META II، يُحدد ترتيب الاختبار بواسطة المعادلة. ومثل لغات البرمجة الأخرى، قد يحدث تجاوز في سعة المكدس في META II عند محاولة الاستدعاء الذاتي الأيسر. تستخدم META II عامل التسلسل $ (صفر أو أكثر). معادلة تحليل التعبير المكتوبة في META II هي تعبير شرطي يُقيّم من اليسار إلى اليمين.
expr = term $ ( '+' term . OUT (' ADD ') / '-' term . OUT (' SUB '));يُعرَّف التعبير الموجود أعلى معادلة expr بالتعبير الموجود على يمين علامة المساواة (=). عند التقييم من اليسار إلى اليمين بدءًا من علامة المساواة، يكون term هو أول ما يجب اختباره. إذا أعاد term قيمة خاطئة، يفشل expr. في حالة النجاح، يتم التعرف على أحد الحدود، ثم ندخل في حلقة تكرار لا نهائية $ صفر أو أكثر، حيث نختبر أولًا وجود علامة الجمع (+)، وإذا فشل ذلك، نجرب البديل '-'، وأخيرًا إذا لم يتم التعرف على '-'، تنتهي الحلقة مع إرجاع expr قيمة ناجحة بعد التعرف على أحد الحدود. إذا نجح '+' أو '-'، يتم استدعاء term. وإذا نجح، تتكرر الحلقة. يمكن أيضًا التعبير عن معادلة expr باستخدام التجميع المتداخل كما يلي:
expr = term $ (( '+' / '-' ) term );تم حذف عناصر إنتاج الكود لتبسيط المثال. ونظرًا لمجموعة الأحرف المحدودة لأجهزة الكمبيوتر القديمة، /استُخدم الحرف كبديل، أو كعامل "أو". $يُستخدم عامل التكرار، ، لمطابقة صفر أو أكثر من شيء ما.
expr = term $ ( '+' term . OUT (' ADD ') / '-' term . OUT (' SUB ') );يمكن التعبير عن ما سبق باللغة الإنجليزية كما يلي: التعبير (expr) هو مصطلح متبوع بصفر أو أكثر من (مصطلح موجب أو مصطلح سالب). يصف شور هذا بأنه وسيلة لتحسين الكفاءة، ولكن على عكس محلل الانحدار التكراري البسيط ، فإنه يضمن أيضًا صحة تجميع العمليات الحسابية.
expr = term $ ( '+' term . OUT (' ADD ') / '-' term . OUT (' SUB ') ); term = factor $ ( '*' factor . OUT (' MPY ') / '/' factor . OUT (' DIV ') ); factor = ( . ID / . NUMBER / '(' expr ')') ( '^' factor . OUT (' EXP ') / . EMPTY );بفضل القدرة على التعبير عن التسلسل باستخدام حلقة أو تكرار من اليمين ("الذيل")، يمكن التحكم في ترتيب التقييم.
تبدو قواعد بناء الجملة تصريحية، ولكنها في الواقع تصبح إلزامية من خلال مواصفاتها الدلالية.
عملية
يُخرج برنامج META II رمز التجميع لآلة المكدس . ويُشبه تقييم هذا الرمز استخدام آلة حاسبة بنظام الترميز البولندي العكسي (RPN).
expr = term $ ( '+' term . OUT (' ADD ') /'-' term . OUT (' SUB ')); term = factor $ ( '*' factor . OUT (' MPY ') / '/' factor . OUT (' DIV ')); factor = (. ID . OUT (' LD ' *) / . NUM . OUT (' LDL ' *) / '(' expr ')') ( '^' factor . OUT (' XPN ') / . EMPTY );في المثال أعلاه، يُعدّ كل من .ID و .NUM مُعرّفات مُدمجة للرموز. يشير الرمز * في عملية إنتاج الكود .OUT إلى آخر رمز تم التعرف عليه. عند التعرف على رقم باستخدام .NUM، يُخرج .OUT('LDL' *) تعليمة تحميل القيمة الحرفية متبوعة بالرقم. تعبير:
- (3*a^2+5)/b
سيتم إنشاء ما يلي:
LDL 3 LD a LDL 2 XPN MPY LDL 5 ADD LD b DIVMETA II هو أول إصدار موثق من المترجم الفائق ، [ ملاحظات 1 ] حيث يقوم بالترجمة إلى رمز الآلة لأحد أقدم الأمثلة على الآلة الافتراضية .
الورقة البحثية بحد ذاتها جوهرة رائعة تتضمن عددًا من الأمثلة الممتازة، بما في ذلك عملية التمهيد الذاتي لـ Meta II (تم كل هذا على جهاز 1401 بسعة 8 كيلوبايت (ستة بتات) !)." – آلان كاي
الورقة الأصلية غير متاحة مجانًا، ولكن أعيد نشرها في مجلة دكتور دوبز ، أبريل 1980. وقد أُتيحت شفرة المصدر المكتوبة في أوقات مختلفة (ربما من قِبل مجموعة مستخدمي CP/M ). تضمنت الورقة وصفًا لـ Meta II، ويمكن من حيث المبدأ معالجة هذا الوصف يدويًا لإنتاج برنامج قابل للتفسير بلغة الآلة الافتراضية؛ إذا تم تشغيل هذا البرنامج وأنتج مخرجات متطابقة، فإن التنفيذ يكون صحيحًا.
كان مشروع META II بمثابة إثبات للمفهوم. قاعدة يمكن الانطلاق منها.
لا يتم تقديم META II كلغة قياسية ، ولكن كنقطة انطلاق يمكن للمستخدم من خلالها تطوير " لغة " META الخاصة به . [ 1 ]
تلت ذلك العديد من "لغات" META. انضم شور إلى شركة تطوير الأنظمة ، حيث كان عضوًا في مشروع مُترجم كتابة وتنفيذ المُترجمات (CWIC). بُنيت لغة SYNTAX الخاصة بـ CWIC على META II، مضيفةً مُعامل التراجع البديل، ومُعاملات التطلع الإيجابي والسلبي، ومعادلات الرموز المُبرمجة. أُزيلت عمليات .OUTAND ، وأُضيفت عمليات تحويل المكدس . عالجت لغة GENERATOR، المبنية على LISP 2، الأشجار التي تُنتجها لغة تحليل SYNTAX. لتوليد التعليمات البرمجية، وُضع استدعاء دالة المُولد في معادلة SYNTAX. طُوّرت هذه اللغات من قِبل أعضاء المجموعة الفرعية LA ACM SIGPLAN المعنية بالمُترجمات الموجهة نحو بناء الجملة. نظر شور إلى لغة META II نظرة عامة:.LABEL:<node>!<number>
يُستخدم مصطلح "لغة META " ( META بأحرف كبيرة) للدلالة على أي لغة برمجة لكتابة المترجمات تم تطويرها بهذه الطريقة. [ 1 ]
يشرح شور أن META II هي قاعدة يمكن من خلالها تطوير "لغات" META أخرى.
انظر أيضاً
ملحوظات
- ↑ تجاهل META I الذي تم ذكره بشكل عابر فقط في وثيقة META II.
مراجع
- 1 2 3 4 شور، ديوي فال (1 يناير 1964). "META II: لغة كتابة مترجمات موجهة نحو بناء الجملة". ACM '64: وقائع المؤتمر الوطني التاسع عشر لجمعية ACM لعام 1964 (ملف PDF) . جمعية آلات الحوسبة (مرفق الحوسبة بجامعة كاليفورنيا في لوس أنجلوس). الصفحات 41.301 – 41.3011 . doi : 10.1145/800257.808896 .
- ↑ شور، ديوي فال (1963). "لغة SMALGOL موجهة نحو بناء الجملة لجهاز 1401". المؤتمر الوطني لجمعية ACM . دنفر، كولورادو.
- ↑ ديوي، فال شور (1963). ميتا 2: لغة كتابة مترجمات موجهة نحو بناء الجملة (ملف PDF) . جامعة كاليفورنيا في لوس أنجلوس: مرفق الحوسبة بجامعة كاليفورنيا في لوس أنجلوس.
روابط خارجية
- برامج الستينيات
- لغات البرمجة
- مولدات المحلل اللغوي
