ياك
| المؤلف(ون) الأصلي(ون) | ستيفن سي جونسون |
|---|---|
| مستودع |
|
| مكتوب في | ج |
| نظام التشغيل | يونكس ، شبيه يونكس ، الخطة 9 ، الجحيم |
| منصة | متعدد المنصات |
| يكتب | يأمر |
| رخصة | الخطة 9: رخصة معهد ماساتشوستس للتكنولوجيا |
Yacc ( مترجم آخر-مترجم ) هو برنامج كمبيوتر لنظام التشغيل يونكس طوره ستيفن سي جونسون . وهو مولد محلل اشتقاق أقصى اليمين من اليسار إلى اليمين (LALR) من خلال النظر إلى الأمام ، حيث يقوم بإنشاء محلل LALR (جزء من المترجم يحاول فهم الكود المصدري من الناحية النحوية ) بناءً على قواعد نحوية رسمية ، مكتوبة بطريقة تدوين مشابهة لصيغة باكوس-ناور (BNF). [1] يتم توفير Yacc كأداة مساعدة قياسية على BSD وAT&T Unix. [2] تتضمن توزيعات Linux المستندة إلى GNU Bison ، وهو بديل Yacc متوافق مع التوجيه الأمامي . [3]
تاريخ
في أوائل سبعينيات القرن العشرين، طور ستيفن سي جونسون ، عالم الكمبيوتر في مختبرات بيل / إيه تي آند تي ، برنامج Yacc لأنه أراد إدراج عامل حصري أو عامل في مُجمِّع لغة بي [4] (تم تطويره باستخدام مُجمِّع-مُجمِّع TMG الخاص بماكلروي [5] )، لكن تبين أن هذه مهمة صعبة. ونتيجة لذلك، تم توجيهه من قبل زميله في مختبرات بيل آل أهو إلى عمل دونالد كنوث على تحليل LR ، والذي كان بمثابة الأساس لبرنامج Yacc. [4] تأثر برنامج Yacc بـ [6] وحصل على اسمه في إشارة إلى مُجمِّع-مُجمِّع TMG. [7]
تم كتابة Yacc في الأصل بلغة البرمجة B ، ولكن سرعان ما تمت إعادة كتابته بلغة C بواسطة آلان سنايدر. [5] ظهر كجزء من الإصدار 3 من يونكس ، [8] وتم نشر وصف كامل لـ Yacc في عام 1975. [6]
استخدم جونسون Yacc لإنشاء مُجمِّع C المحمول . [8] حاول Bjarne Stroustrup أيضًا استخدام Yacc لإنشاء مواصفات رسمية لـ C++ ، لكنه "هُزم بسبب قواعد لغة C". [9] وبينما وجد أنه غير مناسب للمواصفات الرسمية للغة، شرع Stroustrup في استخدام Yacc لتنفيذ Cfront ، أول تنفيذ لـ C++. [10]
في مقابلة أجريت عام 2008، أشار جونسون إلى أن "المساهمة التي قدمها Yacc في نشر Unix و C هي ما أفتخر به أكثر من أي شيء آخر". [11]
وصف
المدخلات إلى Yacc هي قواعد نحوية مع مقتطفات من التعليمات البرمجية بلغة C (تسمى "إجراءات") مرفقة بقواعدها. مخرجاتها عبارة عن محلل تحويل واختزال بلغة C ينفذ مقتطفات C المرتبطة بكل قاعدة بمجرد التعرف على القاعدة. تتضمن الإجراءات النموذجية إنشاء أشجار التحليل . باستخدام مثال من Johnson، إذا قامت المكالمة node(label, left, right) بإنشاء عقدة شجرة تحليل ثنائية مع التسمية والأبناء المحددين، فإن القاعدة
التعبير : التعبير '+' التعبير { $$ = العقدة ( '+' , $1 , $3 ); }
يتعرف على تعبيرات التلخيص وينشئ عقدًا لها. تشير المعرفات الخاصة $$ و $1 و $3 إلى العناصر الموجودة في مكدس المحلل . [6]
ينتج Yacc محللًا فقط (محلل عبارات) يمكن استخدامه بمفرده في حالة التحليل بدون ماسح ضوئي ، ومع ذلك، يتطلب التحليل النحوي الكامل عادةً محللًا معجميًا خارجيًا لأداء مرحلة التجزئة أولاً (تحليل الكلمات)، والتي تتبعها مرحلة التحليل المناسبة. [6] مولدات المحلل المعجمي، مثل Lex أو Flex ، متاحة على نطاق واسع لهذا الغرض. يحدد معيار IEEE POSIX P1003.2 الوظائف والمتطلبات لكل من Lex وYacc. [12]
أصبحت بعض إصدارات AT&T Yacc مفتوحة المصدر . على سبيل المثال، يتوفر الكود المصدري مع التوزيعات القياسية لـ Plan 9. [ 13]
تأثير
كانت Yacc والبرامج المشابهة (إعادة التنفيذ إلى حد كبير) شائعة جدًا. كان Yacc نفسه متاحًا كمولد محلل افتراضي على معظم أنظمة يونكس، على الرغم من أنه تم استبداله منذ ذلك الحين ببرامج أحدث ومتوافقة إلى حد كبير، مثل Berkeley Yacc و GNU Bison و MKS Yacc وAbraxas PCYACC. تم تضمين إصدار محدث من AT&T Yacc الأصلي كجزء من مشروع OpenSolaris التابع لشركة Sun. يقدم كل منهما تحسينات طفيفة وميزات إضافية على Yacc الأصلي، لكن المفهوم والبنية الأساسية ظلت كما هي. [14]
كانت Yacc أيضًا واحدة من العديد من أدوات UNIX المتاحة لنظام التشغيل UNOS الخاص بشركة Charles River Data Systems بموجب ترخيص Bell Laboratories . [15]
من بين اللغات التي تم تنفيذها لأول مرة باستخدام Yacc هي AWK و C++ و [10] eqn و Pic . [16] كما تم استخدام Yacc على Unix لتنفيذ Portable C Compiler ، بالإضافة إلى المحللات للغات البرمجة مثل FORTRAN 77 و Ratfor و APL و bc و m4 وما إلى ذلك. [8] [17]
تمت إعادة كتابة Yacc أيضًا للغات أخرى، بما في ذلك OCaml ، [18] و Ratfor ، و ML ، و Ada ، و Pascal ، و Java ، و PHP ، و Python ، و Ruby ، و Go ، [19] و Common Lisp [20] و Erlang . [21]
- Berkeley Yacc : سرعان ما أصبح تنفيذ Berkeley لـ Yacc أكثر شعبية من AT&T Yacc نفسه بسبب أدائه وعدم وجود قيود على إعادة الاستخدام. [22]
- محلل LALR : خوارزمية التحليل الأساسية في المحللات التي تم إنشاؤها بواسطة Yacc.
- Bison : النسخة GNU من Yacc.
- Lex ( ومحلل معجمي Flex )، وهو محلل رمزي يستخدم عادة بالاشتراك مع Yacc (وBison).
- BNF هو بناء جملة يستخدم للتعبير عن القواعد النحوية الخالية من السياق : وهي طريقة رسمية لوصف اللغات الخالية من السياق.
- PLY (Python Lex-Yacc) هو تنفيذ بديل لـ Lex و Yacc في Python.
انظر أيضا
مراجع
- ^ "من الألف إلى الياء للغات البرمجة: YACC". Computerworld. مؤرشف من الأصل في 31 يناير 2013. تم الاسترجاع في 30 نوفمبر 2012 .
- ^ ليفين، جون (1992). ليكس ويا سيباستوبول، كاليفورنيا: أوريلي وشركاؤه. ص. 20. رقم ISBN 1-56592-000-7.
- ^ ليفين، جون (2009). فليكس آند بايسون . سيباستوبول، كاليفورنيا: أوريلي ميديا. ص. 15. رقم ISBN 978-0-596-15597-1.
- ^ ab Morris, Richard (1 October 2009). "Stephen Curtis Johnson: Geek of the Week". Red Gate Software . تم الاسترجاع في 19 يناير 2018 .
- ^ ab Ritchie, Dennis M. (April 1993). "The Development of the C Language". History of programming languages---II . Association for Computing Machinery, Inc. (published 1996-01-01). doi : 10.1145/234286.1057834 . ISBN 0-201-89502-1ص 675، 684:
بعد أن نجحت نسخة TMG من لغة B، أعاد تومسون كتابة لغة B في حد ذاتها (خطوة تمهيدية).... عندما عاد جونسون إلى مختبرات بيل في عام 1973، شعر بالارتباك عندما اكتشف أن اللغة التي أحضر بذورها إلى كندا قد تطورت في وطنه؛ حتى برنامج yacc الخاص به قد أعيد كتابته بلغة C، بواسطة آلان سنايدر.
- ^ abcd Johnson, Stephen C. (1975). Yacc: Yet Another Compiler-Compiler (تقرير فني). Murray Hill, New Jersey: AT&T Bell Laboratories. 32 . تم الاسترجاع في 31 يناير 2020 .
- ^ "أنظمة الكتابة المترجمية المبكرة". مختبر أطلس للكمبيوتر.
- ^ abc McIlroy, MD (1987). قارئ بحث يونكس: مقتطفات موثقة من دليل المبرمج، 1971-1986 (PDF) (تقرير فني). CSTR. مختبرات بيل. 139.
- ^ ستروستروب، بيارن . "تاريخ لغة C++: 1979−1991" (PDF) .
- ^ أب ستروستروب ، بيارن . "كود مصدر Cfront".
- ^ هاملتون، نعومي (2008-07-09). "Yacc، Unix، ونصائح من خريجي مختبرات بيل ستيفن جونسون". www.computerworld.com . مؤرشف من الأصل في 2020-08-22 . تم الاسترجاع في 2020-11-10 .
- ^ – مرجع Shell والأدوات المساعدة، مواصفة UNIX الفردية ، الإصدار 4 من The Open Group . – مرجع Shell والأدوات المساعدة، مواصفة UNIX الفردية ، الإصدار 4 من The Open Group .
- ^ "plan9: UC Berkeley release of Plan 9 under the GPLv2". GitHub . 26 ديسمبر 2017 . تم الاسترجاع في 2 يناير 2018 .
- ^ دليل البيسون: التاريخ
- ^ دليل المطلعين على الكون (PDF) . Charles River Data Systems, Inc. 1983. ص. 13.
- ^ "UNIX Special: Profs Kernighan & Brailsford". Computerphile . 30 سبتمبر 2015. مؤرشف من الأصل في 2021-12-11.
- ^ Kernighan, Brian W.; Pike, Rob (1984). The Unix Programming Environment . Prentice Hall. ISBN 0-13-937681-X.
- ^ "دليل مستخدم OCaml: الفصل 12 مولدات المعجم والمحلل (ocamllex، ocamlyacc)" . تم الاسترجاع في 25 نوفمبر 2013 .
- ^ "Yacc.go: نسخة من Yacc للغة برمجة Go" . تم الاسترجاع في 15 يوليو 2017 .
- ^ "CL-Yacc: نسخة Common Lisp من Yacc".
- ^ "yecc: تنفيذ Erlang لـ Yacc".
- ^ جون ليفين (أغسطس 2009)، فليكس آند بايسون ، أوريلي ميديا
روابط خارجية
- بيئة لعب لتعلم واختبار بناء الجملة
- – مرجع Shell and Utilities، مواصفات UNIX الفردية ، الإصدار 4 من The Open Group
- – دليل المبرمج لـ Plan 9 ، المجلد 1
- – دليل الأوامر العامة للعبة Inferno
- – دليل الأوامر العامة لنظام Linux
