ليكس (برنامج)
Lex هو برنامج حاسوبي يُنشئ محللات معجمية (ماسحات ضوئية أو محللات معجمية). [ 1 ] [ 2 ] يُستخدم عادةً مع مُولِّد محلل yacc، وهو مُولِّد المحللات المعجمية القياسي في العديد من أنظمة يونكس والأنظمة الشبيهة بيونكس . وقد تم تحديد أداة مُكافئة كجزء من معيار POSIX . [ 3 ]
يقرأ برنامج Lex دفق إدخال يحدد المحلل المعجمي ويكتب شفرة مصدرية تنفذ المحلل المعجمي بلغة البرمجة C.
بالإضافة إلى لغة C، يمكن لبعض الإصدارات القديمة من Lex إنشاء محلل معجمي في Ratfor . [ 4 ]
تاريخ
كُتب برنامج Lex في الأصل بواسطة مايك ليسك وإريك شميدت [ 5 ] ووُصف عام 1975. [ 6 ] [ 7 ] في السنوات اللاحقة، أصبح Lex مولد محلل المعجم القياسي على العديد من أنظمة يونكس والأنظمة الشبيهة بيونكس . في عام 1983، كان Lex أحد أدوات يونكس العديدة المتاحة لنظام التشغيل UNOS التابع لشركة Charles River Data Systems بموجب ترخيص مختبرات بيل . [ 8 ] على الرغم من توزيعه في الأصل كبرنامج احتكاري، إلا أن بعض إصدارات Lex أصبحت الآن مفتوحة المصدر . تُوزع الآن إصدارات Lex مفتوحة المصدر، والمبنية على الكود الاحتكاري الأصلي، مع أنظمة تشغيل مفتوحة المصدر مثل OpenSolaris و Plan 9 من مختبرات بيل . أحد إصدارات Lex الشائعة مفتوحة المصدر، والذي يُسمى flex أو "محلل المعجم السريع"، ليس مشتقًا من كود احتكاري.
بنية ملف ليكس
إن بنية ملف Lex تشبه عمداً بنية ملف yacc: حيث يتم تقسيم الملفات إلى ثلاثة أقسام، مفصولة بأسطر تحتوي على علامتي نسبة مئوية فقط، كما يلي:
- يُعرّف قسم التعريفات وحدات الماكرو ويستورد ملفات الرأس المكتوبة بلغة C. كما يُمكن كتابة أي كود C هنا، والذي سيتم نسخه حرفيًا إلى ملف المصدر المُنشأ.
- يربط قسم القواعد أنماط التعبيرات النمطية بعبارات لغة C. عندما يرى المحلل المعجمي نصًا في المدخلات يطابق نمطًا معينًا، فإنه سينفذ كود C المرتبط به.
- يحتوي قسم كود C على عبارات ووظائف C تُنسخ حرفيًا إلى ملف المصدر المُولّد. من المفترض أن تحتوي هذه العبارات على كود يتم استدعاؤه بواسطة القواعد الموجودة في قسم القواعد. في البرامج الكبيرة، يكون من الأنسب وضع هذا الكود في ملف منفصل يتم ربطه أثناء عملية الترجمة .
مثال على ملف Lex
فيما يلي مثال لملف Lex الخاص بإصدار flex من Lex. يتعرف هذا الملف على سلاسل الأرقام (الأعداد الصحيحة الموجبة) في المدخلات، ويطبعها ببساطة.
/*** قسم التعريفات ***/% { /* كود C الذي سيتم نسخه حرفيًا */ #include <stdio.h> % }%% /*** قسم القواعد ***//* [0-9]+ يطابق سلسلة من رقم واحد أو أكثر */ [ 0-9 ] + { /* yytext هي سلسلة نصية تحتوي على النص المطابق. */ printf ( "رأيت عددًا صحيحًا: %s \n " , yytext ); }. | \ n { /* تجاهل جميع الأحرف الأخرى. */ }%% /*** قسم كود C ***/int main ( void ) { /* استدعاء المحلل المعجمي، ثم الخروج. */ yylex (); return 0 ; }إذا تم إدخال هذه البيانات إلى البرنامج flex، فسيتم تحويلها إلى ملف C. يمكن تجميع هذا الملف إلى ملف تنفيذي يقوم بمطابقة وإخراج سلاسل من الأعداد الصحيحة. على سبيل المثال، إذا تم إدخال البيانات التالية:lex.yy.c
abc123z.!&*2gj6
سيقوم البرنامج بالطباعة التالية:
تم العثور على عدد صحيح: 123 تم العثور على عدد صحيح: 2 تم العثور على عدد صحيح: 6
استخدام Lex مع أدوات البرمجة الأخرى
استخدام Lex مع مولدات المحلل اللغوي
يقتصر برنامج Lex، كغيره من محللات المعجم، على القواعد التي يمكن وصفها باستخدام التعابير النمطية . ولهذا السبب، يمكن تنفيذ Lex بواسطة آلات الحالة المحدودة، كما هو موضح في تسلسل تشومسكي للغات. وللتعرف على لغات أكثر تعقيدًا، يُستخدم Lex غالبًا مع مولدات المحللات النحوية مثل Yacc أو Bison . تستخدم مولدات المحللات النحوية قواعد نحوية رسمية لتحليل تدفق المدخلات.
يُفضّل عادةً استخدام محلل لغوي، مثلاً مُولّد بواسطة Yacc، يقبل سلسلة من الرموز (سلسلة رموز) كمدخل، بدلاً من معالجة سلسلة من الأحرف (سلسلة أحرف) مباشرةً. ويُستخدم Lex غالباً لإنتاج سلسلة الرموز هذه.
يشير التحليل بدون الماسح الضوئي إلى تحليل دفق الأحرف المدخلة مباشرة، بدون محلل معجمي مميز.
ليكس واصنع
أداة make هي أداة مساعدة تُستخدم لصيانة البرامج التي تستخدم Lex. تفترض make أن الملف الذي يحمل الامتداد . .lهو ملف مصدر Lex. LFLAGSيمكن استخدام الماكرو الداخلي لـ make لتحديد خيارات Lex التي سيتم استدعاؤها تلقائيًا بواسطة make. [ 9 ]
انظر أيضاً
مراجع
- ↑ ليفين، جون ر .؛ ماسون، توني؛ براون، دوغ (1992). lex & yacc ( الطبعة الثانية). أورايلي . الصفحات 1-2 . ISBN 1-56592-000-7.
- ↑ ليفين، جون (أغسطس 2009). فليكس وبيسون . دار نشر أورايلي. ص 304. ISBN 978-0-596-15597-1أُرشف من المصدر الأصلي بتاريخ 16 أغسطس 2011. تم الاطلاع عليه بتاريخ 8 يناير 2010 .
- ↑ مواصفات المجموعة المفتوحة الأساسية، الإصدار 7، طبعة 2018 § Shell & Utilities § Utilities § lex
- ↑ جون ر. ليفين؛ جون ماسون؛ دوغ براون (1992). ليكس وياك . أورايلي. ISBN 9781565920002.
- ↑ ليسك، م. إي؛ شميدت، إي. "ليكس - مولد محلل معجمي" . تم الاسترجاع في 16 أغسطس 2010 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ ليسك، م. إي.؛ شميدت، إي. (21 يوليو 1975). "ليكس - مولد محلل معجمي" (ملف PDF) . نظام المشاركة الزمنية يونكس: دليل مبرمج يونكس، الطبعة السابعة، المجلد 2ب . bell-labs.com. مؤرشف (ملف PDF) من الأصل في 16 مارس 2012. تم الاطلاع عليه في 20 ديسمبر 2011 .
- ↑ ليسك، م. إ. (أكتوبر 1975). "ليكس - مولد محلل معجمي". تقرير تقني لعلوم الحاسوب رقم 39. موراي هيل، نيو جيرسي: مختبرات بيل.
- ↑ دليل المطلع على الكون (ملف PDF) . شركة تشارلز ريفر لأنظمة البيانات، 1983. صفحة 13. مؤرشف (ملف PDF) من الأصل بتاريخ 25 فبراير 2024. تم الاطلاع عليه بتاريخ 10 فبراير 2024 .
- ↑ "make" . المواصفات الأساسية لمجموعة Open Group (6). معهد مهندسي الكهرباء والإلكترونيات (IEEE) ومجموعة Open Group. 2004. معيار IEEE 1003.1، إصدار 2004. مؤرشف من الأصل في 31 أكتوبر 2010. تم الاطلاع عليه في 18 سبتمبر 2007 .
روابط خارجية
- استخدام Flex وBison على موقع Macworld.com
- – دليل مرجعي لأوامر المستخدم لنظام التشغيل Solaris 11.4
- – دليل مبرمج الخطة 9 ، المجلد 1
- أدوات التجميع
- أدوات برمجة يونكس
- أدوات يونكس SUS2008
- أوامر الخطة 9
- آلات الحالة المحدودة
- التحليل المعجمي
