مُجمِّع المُحلِّل
في برمجة الحاسوب ، يُعدّ مُركِّب المُحلِّلات دالةً من الرتبة العليا تقبل عدة مُحلِّلات كمدخلات وتُعيد مُحلِّلاً جديداً كمخرج. في هذا السياق، المُحلِّل هو دالة تقبل سلاسل نصية كمدخلات وتُعيد بنيةً ما كمخرجات، عادةً ما تكون شجرة تحليل أو مجموعة من المؤشرات التي تُمثِّل مواقع في السلسلة النصية حيث توقف التحليل بنجاح. تُتيح مُركِّبات المُحلِّلات استراتيجية تحليل تنازلي متكرر تُسهِّل البناء والاختبار المعياريين المُجزَّأين. تُسمى تقنية التحليل هذه بالتحليل التوافقي .
استُخدمت المحللات اللغوية التي تستخدم المُركِّبات على نطاق واسع في تصميم نماذج أولية للمترجمات والمعالجات للغات خاصة بمجالات محددة ، مثل واجهات المستخدم للغة الطبيعية لقواعد البيانات، حيث تتكامل العمليات الدلالية المعقدة والمتنوعة بشكل وثيق مع المعالجة النحوية. في عام 1989، أوضح ريتشارد فروست وجون لانشبري [ 1 ] استخدام مُركِّبات المحلل اللغوي لبناء مترجمات للغة الطبيعية . استخدم غراهام هاتون أيضًا وظائف من الرتبة العليا للتحليل الأساسي في عام 1992 [ 2 ] والتحليل الأحادي في عام 1996. [ 3 ] كما عرض إس دي سويرسترا الجوانب العملية لمركبات المحلل في عام 2001. [ 4 ] في عام 2008، وصف فروست وحافظ وكالاغان [ 5 ] مجموعة من مركبات المحلل في لغة البرمجة الوظيفية هاسكل التي تحل المشكلة القديمة المتمثلة في استيعاب الاستدعاء الذاتي الأيسر ، وتعمل كأداة تحليل كاملة من أعلى إلى أسفل في وقت ومساحة متعددة الحدود .
الفكرة الأساسية
في أي لغة برمجة تدعم الدوال من الدرجة الأولى ، يمكن استخدام مُركِّبات المُحلِّلات لدمج المُحلِّلات الأساسية وبناء مُحلِّلات لقواعد أكثر تعقيدًا. على سبيل المثال، قد تحتوي قاعدة إنتاج في قواعد اللغة الخالية من السياق (CFG) على بديل واحد أو أكثر، وقد يتكون كل بديل من سلسلة من الرموز غير الطرفية و/أو الرموز الطرفية، أو قد يتكون من رمز غير طرفي واحد أو رمز طرفي واحد أو سلسلة فارغة. إذا كان هناك مُحلِّل بسيط مُتاح لكل بديل من هذه البدائل، فيمكن استخدام مُركِّب المُحلِّلات لدمج كل هذه المُحلِّلات، مما يُنتج مُحلِّلًا جديدًا قادرًا على التعرّف على أيٍّ من البدائل أو جميعها.
في اللغات التي تدعم تحميل المعاملات الزائدة ، يمكن أن يتخذ مُركِّب المُحلِّل شكل معامل وسطي ، يُستخدم لربط مُحلِّلات مختلفة لتكوين قاعدة كاملة. وبذلك، يُتيح مُركِّب المُحلِّل تعريف المُحلِّلات بأسلوب مُضمَّن، في كود يُشابه في بنيته قواعد النحو الرسمي. وعلى هذا النحو، يُمكن اعتبار التطبيقات مواصفات قابلة للتنفيذ مع جميع المزايا المرتبطة بها، مثل سهولة القراءة.
المجموعات
لتبسيط النقاش، سنناقش مُركِّبات المُحلِّل اللغوي من منظور المُعرِّفات فقط. إذا كان طول سلسلة الإدخال n #input، ويتم الوصول إلى عناصرها عبر فهرس n j، فإن المُعرِّف هو مُحلِّل لغوي يُعيد، كناتج، مجموعة من الفهارس تُمثِّل الفهارس التي نجح المُحلِّل اللغوي عندها في التعرُّف على سلسلة من الرموز تبدأ بالفهرس n j. تشير مجموعة النتائج الفارغة إلى أن المُعرِّف لم يتعرّف على أي سلسلة تبدأ بالفهرس n j.
- يتعرف المُحلل
emptyعلى السلسلة الفارغة. ينجح هذا المُحلل دائمًا، ويعيد مجموعة أحادية تحتوي على فهرس الإدخال:
- يتعرف المُحلل على الرمز الطرفي . إذا كان الرمز الموجود في الفهرس في سلسلة الإدخال هو ، فإن هذا المُحلل يُرجع مجموعة أحادية تحتوي على ؛ وإلا فإنه يُرجع المجموعة الفارغة.
term xxjxj + 1
بفرض وجود اثنين من أدوات التعرف p، qيمكننا تحديد اثنين من مُركِّبات التحليل الرئيسية، أحدهما لمطابقة القواعد البديلة والآخر لتسلسل القواعد:
- يقوم مُجمِّع المُحلِّل "البديل"، ⊕، بتطبيق كل من المُعرِّفات على نفس الفهرس
jويعيد اتحاد الفهارس النهائية للمُعرِّفات:
- يقوم مُجمِّع "التسلسل"، ⊛، بتطبيق المُعرِّف الأول
pعلى فهرس الإدخالj، ولكل فهرس نهائي، يُطبِّق المُعرِّف الثانيqمع اعتباره فهرس بداية. ويُعيد اتحاد الفهارس النهائية المُعادة من جميع استدعاءاتq:
قد توجد عدة طرق مختلفة لتحليل سلسلة نصية مع الوصول إلى نفس الفهرس، مما يشير إلى وجود غموض في القواعد النحوية . لا تعترف أدوات التعرف البسيطة بهذه الغموضات؛ إذ يُدرج كل فهرس إنهاء محتمل مرة واحدة فقط في مجموعة النتائج. وللحصول على مجموعة نتائج أكثر شمولاً، يجب إرجاع كائن أكثر تعقيدًا مثل شجرة التحليل .
أمثلة
لنفترض وجود قواعد نحوية خالية من السياق شديدة الغموض . باستخدام المُركِّبات المُعرَّفة سابقًا، يُمكننا تعريف تدوينات قابلة للتنفيذ لهذه القواعد النحوية في لغة برمجة وظيفية حديثة (مثل هاسكل ) على النحو التالي: . عند تطبيق المُعرِّف عند فهرس من سلسلة الإدخال، فإنه يُعيد مجموعة نتائج ، مما يُشير إلى وجود تطابقات تبدأ من الفهرس 2 وتنتهي عند أي فهرس بين 2 و5 شاملًا.s ::= ‘x’ s s | εs = term ‘x’ <*> s <*> s <+> emptys2x x x x x{2,3,4,5}
أوجه القصور والحلول
لا تقتصر مُركِّبات المُحلِّلات النحوية، كغيرها من مُحلِّلات الانحدار التكراري ، على القواعد النحوية الخالية من السياق ، وبالتالي لا تُجري بحثًا شاملًا عن الغموض في مجموعات تحليل LL( k ) First k و Follow k . لذا، لا يُعرف الغموض إلا في وقت التشغيل، وعندما يُفعِّله المُدخل. في مثل هذه الحالات، قد يلجأ مُحلِّل الانحدار التكراري افتراضيًا (ربما دون علم مُصمِّم القواعد النحوية) إلى أحد المسارات الغامضة المُحتملة، مما يُؤدي إلى تشويش دلالي (تداخل) في استخدام اللغة. يُؤدي هذا إلى أخطاء برمجية من قِبل مُستخدمي لغات البرمجة الغامضة، والتي لا يتم الإبلاغ عنها في وقت الترجمة، والتي لا تنتج عن خطأ بشري، بل عن القواعد النحوية الغامضة نفسها. الحل الوحيد الذي يُزيل هذه الأخطاء هو إزالة الغموض واستخدام قواعد نحوية خالية من السياق.
تُعاني التطبيقات البسيطة لمُركِّبات المُحلِّل النحوي من بعض أوجه القصور الشائعة في التحليل النحوي من أعلى إلى أسفل. يتطلب التحليل النحوي التوافقي البسيط وقتًا ومساحةً أُسِّيين عند تحليل قواعد نحوية غامضة خالية من السياق. في عام ١٩٩٦، أوضح فروست وشيدلوفسكي كيفية استخدام التخزين المؤقت مع مُركِّبات المُحلِّل النحوي لتقليل التعقيد الزمني إلى كثير الحدود. [ ٦ ] لاحقًا، استخدم فروست المونادات لبناء المُركِّبات من أجل ربط جدول التخزين المؤقت بشكل منهجي وصحيح طوال عملية الحساب. [ ٧ ]
كما هو الحال في أي تحليل نحوي تنازلي متكرر ، فإن مُركِّبات المُحلِّل النحوي التقليدية (مثل المُركِّبات المذكورة أعلاه) لن تتوقف أثناء معالجة قواعد نحوية تكرارية يسارية (على سبيل المثال ). وقد وصف فروست وحافظ في عام 2006 خوارزمية تعرّف تُراعي القواعد النحوية الغامضة ذات القواعد التكرارية اليسارية المباشرة. [ 8 ] تعمل هذه الخوارزمية على تقليص حجم التحليل التكراري اليساري المتزايد باستمرار من خلال فرض قيود على العمق. وفي عام 2007، قام فروست وحافظ وكالاغان بتوسيع هذه الخوارزمية لتصبح خوارزمية تحليل نحوي كاملة تُراعي التكرار اليساري المباشر وغير المباشر في وقت متعدد الحدود ، وتُنتج تمثيلات مُدمجة بحجم متعدد الحدود لعدد أشجار التحليل النحوي الذي قد يكون أُسّيًا للقواعد النحوية شديدة الغموض. [ 9 ] تُراعي هذه الخوارزمية المُوسَّعة التكرار اليساري غير المباشر من خلال مُقارنة "السياق المحسوب" مع "السياق الحالي". كما وصف المؤلفون أنفسهم تطبيقهم لمجموعة من مُركِّبات المُحلِّل اللغوي المكتوبة بلغة هاسكل والمستندة إلى الخوارزمية نفسها. [ 5 ] [ 10 ]s ::= s <*> term ‘x’|empty
ملحوظات
- ↑ فروست ولونشبري 1989 .
- ↑ هاتون 1992 .
- ↑ هاتون، غراهام؛ ماير، إريك. مُركِّبات المُحلِّل الأحادي (ملف PDF) (تقرير). جامعة نوتنغهام . تم الاطلاع عليه بتاريخ 13 فبراير 2023 .
- ↑ سويرسترا 2001 .
- 1 2 فروست، حافظ وكالاغان 2008 .
- ↑ فروست وشيدلوفسكي 1996 .
- ↑ فروست 2003 .
- ↑ فروست وحافظ 2006 .
- ↑ فروست، حافظ وكالاغان 2007 .
- ↑ راجع.X - SAIGA —وهو عبارة عن محددات القواعدالقابلةللتنفيذ
مراجع
- بيرج، ويليام هـ. (1975). تقنيات البرمجة التكرارية . سلسلة برمجة الأنظمة. أديسون-ويسلي. ISBN 978-0201144505.
- فروست، ريتشارد؛ لانشبري، جون (1989). "بناء مترجمات اللغة الطبيعية في لغة وظيفية كسولة" (ملف PDF) . مجلة الكمبيوتر . عدد خاص عن البرمجة الوظيفية الكسولة. 32 (2): 108-121 . doi : 10.1093/comjnl/32.2.108 . مؤرشف من الأصل بتاريخ 2013-06-06.
{{cite journal}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط ) - فروست، ريتشارد أ.؛ شيدلوفسكي، باربرا (1996). "تخزين مؤقت لمعالجات لغات التراجع الوظيفية البحتة من أعلى إلى أسفل" (ملف PDF) . مجلة علوم الحاسوب والبرمجة . 27 (3): 263-288 . doi : 10.1016/0167-6423(96)00014-7 .
- فروست، ريتشارد أ. (2003). "التخزين المؤقت الأحادي نحو تقليل البحث مع الحفاظ على صحته". وقائع المؤتمر السادس عشر للجمعية الكندية للدراسات الحاسوبية للذكاء حول التطورات في الذكاء الاصطناعي (AI'03) (ملف PDF) . سبرينغر. الصفحات 66-80 . ISBN 978-3-540-40300-5.
- فروست، ريتشارد أ.؛ حافظ، رحمت الله (2006). "خوارزمية تحليل نحوي جديدة من أعلى إلى أسفل لمعالجة الغموض والاستدعاء الذاتي الأيسر في وقت متعدد الحدود" (ملف PDF) . نشرة ACM SIGPLAN . 41 (5): 46-54 . doi : 10.1145/1149982.1149988 . S2CID 8006549 .
- فروست، ريتشارد أ.؛ حافظ، رحمت الله؛ كالاغان، بول (2007). "تحليل نحوي معياري وفعال من أعلى إلى أسفل للقواعد النحوية اليسارية الغامضة". وقائع ورشة العمل الدولية العاشرة حول تقنيات التحليل النحوي (IWPT)، ACL-SIGPARSE : 109-120 . CiteSeerX 10.1.1.97.8915 .
- فروست، ريتشارد أ.؛ حافظ، رحمت الله؛ كالاغان، بول (2008). "مُركِّبات المُحلِّل النحوي للقواعد النحوية اليسارية الغامضة". الجوانب العملية للغات التصريحية . ACM-SIGPLAN. المجلد 4902. الصفحات 167-181 . CiteSeerX 10.1.1.89.2132 . doi : 10.1007/978-3-540-77442-6_12 . ISBN 978-3-540-77441-9.
- هاتون، غراهام (1992). "دوال الرتبة العليا للتحليل النحوي". مجلة البرمجة الوظيفية . 2 (3): 323-343 . CiteSeerX 10.1.1.34.1287 . doi : 10.1017/s0956796800000411 . S2CID 31067887 .
- أوكاساكي، كريس (1998). "حتى الدوال ذات الرتبة الأعلى للتحليل أو لماذا قد يرغب أي شخص في استخدام دالة من الرتبة السادسة؟" . مجلة البرمجة الوظيفية . 8 (2): 195-199 . doi : 10.1017/S0956796898003001 . S2CID 59694674 .
- سويرسترا، إس. دويتس (2001). "محللات التجميع: من أدوات إلى أدوات" . ملاحظات إلكترونية في علوم الحاسوب النظرية . 41 : 38-59 . doi : 10.1016/S1571-0661(05)80545-6 .
- وادلر، فيليب (1985). "كيفية استبدال الفشل بقائمة من النجاحات: طريقة لمعالجة الاستثناءات، والتراجع، ومطابقة الأنماط في لغات البرمجة الوظيفية الكسولة". لغات البرمجة الوظيفية وهندسة الحاسوب . سلسلة محاضرات في علوم الحاسوب. المجلد 201. الصفحات 113-128 . doi : 10.1007/3-540-15975-4_33 . ISBN 978-0-387-15975-1– عبر وقائع مؤتمر حول لغات البرمجة الوظيفية وهندسة الحاسوب.
- التحليل
- اللغات الرسمية
- البرمجة الوظيفية
