التحليل المعجمي

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

البرامج القائمة على القواعد

يُطلق على البرنامج القائم على القواعد، والذي يُجري عملية تجزئة معجمية، اسم مُجزئ الكلمات [ 1 ] أو الماسح الضوئي ، مع العلم أن مصطلح الماسح الضوئي يُستخدم أيضًا للإشارة إلى المرحلة الأولى من المُحلل المعجمي. يُشكل المُحلل المعجمي المرحلة الأولى من واجهة المُترجم في برنامج Processing. تتم عملية التحليل عادةً في دورة واحدة. تُستخدم المُحللات المعجمية والمُحللات النحوية في أغلب الأحيان مع المُترجمات، ولكن يُمكن استخدامها مع أدوات لغات البرمجة الأخرى، مثل أدوات تنسيق النصوص أو أدوات فحص الأخطاء . يُمكن تقسيم عملية التجزئة المعجمية إلى مرحلتين: المسح الضوئي ، الذي يُجزئ سلسلة الإدخال إلى وحدات نحوية تُسمى وحدات معجمية ويُصنفها إلى فئات رموز، والتقييم ، الذي يُحول الوحدات المعجمية إلى قيم مُعالجة.

تتميز المحللات المعجمية عمومًا ببساطتها، حيث تُترك معظم التعقيدات لمرحلتي التحليل النحوي أو الدلالي ، ويمكن توليدها غالبًا بواسطة مولدات المحللات المعجمية ، ولا سيما برنامج lex أو مشتقاته. مع ذلك، قد تتضمن المحللات المعجمية أحيانًا بعض التعقيدات، مثل معالجة بنية العبارات لتسهيل الإدخال وتبسيط المحلل النحوي، وقد تُكتب جزئيًا أو كليًا يدويًا، إما لدعم المزيد من الميزات أو لتحسين الأداء.

توضيح معنى كلمة "lexime"

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

الرمز المعجمي وتقسيم المعجم إلى رموز

الرمز المعجمي هو سلسلة نصية ذات معنى مُحدد، على عكس الرمز الاحتمالي المستخدم في نماذج اللغة الكبيرة . يتكون الرمز المعجمي من اسم وقيمة اختيارية . اسم الرمز هو فئة من فئات الوحدة المعجمية القائمة على القواعد. [ 2 ]

أمثلة على الرموز الشائعة
اسم الرمز (الفئة المعجمية)توضيحقيم الرموز النموذجية
المعرفالأسماء التي يحددها المبرمج.x، color،UP
الكلمة المفتاحيةالكلمات المحفوظة في اللغة.if، while،return
فاصل/علامة ترقيمعلامات الترقيم والفواصل المزدوجة.}، (،;
المشغلالرموز التي تعمل على الوسائط وتنتج نتائج.+، <،=
حرفيًاالقيم العددية والمنطقية والنصية والقيم المرجعية.true، 6.02e23،"music"
تعليقالتعليقات السطرية أو التعليقات المتكتلة. عادةً ما يتم تجاهلها./* Retrieves user data */،// must be negative
مساحة بيضاءمجموعات من الأحرف غير القابلة للطباعة. عادةً ما يتم تجاهلها.

لنفترض هذا التعبير في لغة البرمجة C :

x=a+b*2;

ينتج عن التحليل المعجمي لهذا التعبير التسلسل التالي من الرموز:

[(identifier,'x'),(operator,'='),(identifier,'a'),(operator,'+'),(identifier,'b'),(operator,'*'),(literal,'2'),(separator,';')]

الاسم الرمزي هو ما يمكن تسميته جزءًا من الكلام في علم اللغة.

التجزئة المعجمية هي تحويل النص الخام إلى رموز معجمية ذات معنى (دلالي أو نحوي)، تنتمي إلى فئات يُحددها برنامج "المحلل المعجمي"، مثل المعرفات، والمعاملات، ورموز التجميع، وأنواع البيانات. ثم تُمرر الرموز الناتجة إلى شكل آخر من أشكال المعالجة. ويمكن اعتبار هذه العملية مهمة فرعية من تحليل المدخلات.

على سبيل المثال، في سلسلة النص :

The quick brown fox jumps over the lazy dog

لا يتم تقسيم السلسلة ضمنيًا على أساس المسافات، كما يفعل متحدث اللغة الطبيعية . يجب تقسيم المدخلات الخام، المكونة من 43 حرفًا، بشكل صريح إلى 9 رموز باستخدام فاصل مسافة محدد (أي مطابقة السلسلة " "أو التعبير النمطي/\s{1}/ ).

عندما يُمثّل صنف الرموز أكثر من وحدة معجمية مُحتملة، غالبًا ما يحفظ المُحلل المعجمي معلومات كافية لإعادة إنتاج الوحدة المعجمية الأصلية، بحيث يُمكن استخدامها في التحليل الدلالي . عادةً ما يسترجع المُحلل النحوي هذه المعلومات من المُحلل المعجمي ويخزنها في شجرة بناء الجملة المجردة . هذا ضروري لتجنب فقدان المعلومات في حالة كون الأرقام مُعرّفات صالحة أيضًا.

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

عندما يُدخل المُحلل المعجمي الرموز إلى المُحلل النحوي، يكون التمثيل المُستخدم عادةً من النوع المُعدّد ، وهو عبارة عن قائمة من التمثيلات العددية. على سبيل المثال، يمكن تمثيل "المُعرّف" بالرقم 0، و"عامل الإسناد" بالرقم 1، و"عامل الجمع" بالرقم 2، وهكذا.

تُعرَّف الرموز غالبًا باستخدام التعابير النمطية ، التي يفهمها مُولِّد محلل معجمي مثل lex ، أو ما يُعادلها من آلات الحالة المحدودة المكتوبة يدويًا . يقرأ المحلل المعجمي (الذي يُولَّد تلقائيًا بواسطة أداة مثل lex أو يُصمَّم يدويًا) سلسلة من الأحرف، ويُحدِّد الوحدات المعجمية فيها، ويُصنِّفها إلى رموز. تُسمى هذه العملية بالتقطيع . إذا وجد المحلل المعجمي رمزًا غير صالح، فسيُبلغ عن خطأ.

يلي عملية التجزئة عملية التحليل . ومن ثم، يمكن تحميل البيانات المُفسَّرة في هياكل البيانات للاستخدام العام أو التفسير أو التجميع .

القواعد المعجمية

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

تُعدّ المسافات البيضاء والتعليقات من أهمّ الفئات المعجمية الشائعة . تُعرَّف هذه الفئات في قواعد اللغة، ويعالجها المحلل المعجمي، ولكن قد تُهمل (دون إنتاج أيّ رموز) وتُعتبر غير ذات دلالة ، بحيث لا تفصل بين رمزين إلا في حالة واحدة (كما في " بدلاً من "). وهناك استثناءان مهمّان لهذه القاعدة. أولاً، في لغات القواعد الجانبية التي تُحدّد الكتل باستخدام المسافة البادئة، تُعدّ المسافات البيضاء الأولية ذات دلالة، لأنها تُحدّد بنية الكتلة، ويتمّ التعامل معها عمومًا على مستوى المحلل المعجمي؛ انظر بنية العبارة أدناه. ثانيًا، في بعض استخدامات المحللات المعجمية، يجب الحفاظ على التعليقات والمسافات البيضاء - على سبيل المثال، يحتاج برنامج الطباعة المُنسّقة إلى إخراج التعليقات، وقد تُقدّم بعض أدوات تصحيح الأخطاء رسائل للمبرمج تُظهر شفرة المصدر الأصلية. في ستينيات القرن الماضي، ولا سيما في لغة ALGOL ، تمّ حذف المسافات البيضاء والتعليقات كجزء من مرحلة إعادة بناء السطر (المرحلة الأولية لواجهة المُصرّف )، ولكن تمّ إلغاء هذه المرحلة المنفصلة، ​​ويتولّى المحلل المعجمي الآن معالجتها.if xifx

تفاصيل

الماسح الضوئي

تعتمد المرحلة الأولى، وهي الماسح الضوئي ، عادةً على آلة الحالة المحدودة (FSM). تحتوي هذه الآلة على معلومات مُشفّرة حول التسلسلات المحتملة للأحرف التي يمكن أن تحتويها أي من الرموز المميزة التي تتعامل معها (تُسمى كل حالة من هذه التسلسلات بـ " الوحدات المعجمية "). على سبيل المثال، قد تحتوي الوحدة المعجمية العددية على أي تسلسل من الأحرف الرقمية . في كثير من الحالات، يُمكن استخدام أول حرف غير مسافة بيضاء لاستنتاج نوع الرمز المميز الذي يليه، ثم تُعالج الأحرف المُدخلة اللاحقة واحدًا تلو الآخر حتى الوصول إلى حرف غير موجود ضمن مجموعة الأحرف المقبولة لهذا الرمز المميز (يُسمى هذا قاعدة " التطابق الأقصى " أو "أطول تطابق "). في بعض اللغات، تكون قواعد إنشاء الوحدات المعجمية أكثر تعقيدًا، وقد تتضمن الرجوع إلى الأحرف التي تمت قراءتها سابقًا. على سبيل المثال، في لغة C، لا يكفي وجود حرف "L" واحد للتمييز بين مُعرّف يبدأ بـ "L" وسلسلة نصية عريضة.

المُقيِّم

أما الوحدة المعجمية ، فهي مجرد سلسلة من الأحرف المعروفة بنوعها المحدد (مثل سلسلة نصية حرفية، أو تسلسل من الأحرف). وتقوم المرحلة الثانية من المحلل المعجمي، وهي المُقيِّم ، بفحص أحرف الوحدة المعجمية لإنتاج قيمة تحتوي على معلومات ذات صلة بالمحلل النحوي.

يُشكّل نوع الكلمة المعجمية وقيمتها معًا ما يُعرف بالرمز . ويمكن أن تكون قيمة الرمز أي شيء يراه المحلل اللغوي ضروريًا لتفسير رمز من ذلك النوع. ومن الأمثلة على القيم النموذجية التي ينتجها المُقيِّم ما يلي:

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

قد يقوم المُقيِّم أيضًا بحذف وحدة معجمية بالكامل، وإخفائها عن المُحلِّل، وهو أمر مفيد للمسافات البيضاء والتعليقات.

على سبيل المثال، في شفرة المصدر لبرنامج حاسوبي، السلسلة

net_worth_future=(assetsliabilities);

قد يتم تحويلها إلى سلسلة الرموز المعجمية التالية؛ حيث يمثل كل سطر رمزًا يتكون من TYPEمتبوعًا بقيمة اختيارية:

المعرّف "net_worth_future" يساوي قوس مفتوح المعرّف "الأصول" ناقص المعرّف "الالتزامات" إغلاق_الأقواس فاصلة منقوطة

يمكن كتابة المحللات المعجمية يدويًا. يُعدّ هذا عمليًا إذا كانت قائمة الرموز صغيرة، لكن المحللات المعجمية المُولّدة بواسطة أدوات مؤتمتة كجزء من سلسلة أدوات مُجمّع-مُجمّع تُعدّ أكثر عمليةً لعدد أكبر من الرموز المحتملة. تقبل هذه الأدوات عمومًا تعابير نمطية تصف الرموز المسموح بها في دفق الإدخال. يرتبط كل تعبير نمطي بقاعدة إنتاج في القواعد المعجمية للغة البرمجة، والتي تُقيّم الوحدات المعجمية المطابقة للتعبير النمطي. قد تُولّد هذه الأدوات شفرة مصدرية قابلة للتجميع والتنفيذ، أو تُنشئ جدول انتقال حالة لآلة ذات حالات محدودة (يتم إدخالها في شفرة نموذجية للتجميع والتنفيذ).

تُستخدم التعابير النمطية لتمثيل الأنماط التي قد تتبعها الأحرف في الوحدات المعجمية. على سبيل المثال، في لغة مبنية على اللغة الإنجليزية ، قد يكون رمز المعرّف أي حرف أبجدي إنجليزي أو شرطة سفلية، متبوعًا بأي عدد من الأحرف الأبجدية الرقمية ASCII و/أو الشرطات السفلية. يمكن تمثيل ذلك بشكل مختصر بالسلسلة النصية [a-zA-Z_][a-zA-Z_0-9]*. وهذا يعني "أي حرف az أو AZ أو _، متبوعًا بصفر أو أكثر من az أو AZ أو _ أو من 0 إلى 9".

لا تتمتع التعابير النمطية وآلات الحالة المحدودة التي تولدها بالقدرة الكافية للتعامل مع الأنماط المتكررة، مثل "عدد n من الأقواس المفتوحة، متبوعة بعبارة، متبوعة بعدد n من الأقواس المغلقة". فهي غير قادرة على حساب عدد الأقواس، والتحقق من تساوي قيمة n على كلا الجانبين، إلا إذا وُجدت مجموعة محدودة من القيم المسموح بها لـ n . يتطلب الأمر محللًا نحويًا كاملًا للتعرف على هذه الأنماط بشكل عام. يمكن للمحلل النحوي إضافة الأقواس إلى مكدس، ثم محاولة إزالتها منه والتحقق مما إذا كان المكدس فارغًا في النهاية (انظر المثال [ 3 ] في كتاب "بنية وتفسير برامج الحاسوب ").

عوائق

عادةً ما تتم عملية تجزئة الكلمات إلى أجزاء صغيرة على مستوى الكلمة. ومع ذلك، يصعب أحيانًا تحديد المقصود بـ "الكلمة". غالبًا ما يعتمد برنامج التجزئة على قواعد استدلالية بسيطة، على سبيل المثال:

  • قد يتم تضمين علامات الترقيم والمسافات البيضاء في قائمة الرموز الناتجة أو لا.
  • جميع السلاسل المتجاورة من الأحرف الأبجدية تشكل جزءًا من رمز واحد؛ وكذلك الأمر بالنسبة للأرقام.
  • يتم فصل الرموز بواسطة أحرف المسافة البيضاء ، مثل المسافة أو فاصل الأسطر، أو بواسطة أحرف الترقيم.

في اللغات التي تستخدم المسافات بين الكلمات (مثل معظم اللغات التي تستخدم الأبجدية اللاتينية، ومعظم لغات البرمجة)، يكون هذا الأسلوب بسيطًا نسبيًا. مع ذلك، حتى هنا توجد العديد من الحالات الشاذة، مثل الاختصارات ، والكلمات الموصولة بشرطة ، والرموز التعبيرية ، والبنى الأكبر حجمًا مثل معرّفات الموارد الموحدة (التي قد تُعتبر، في بعض الحالات، كلمات مفردة). ومن الأمثلة الكلاسيكية على ذلك عبارة "New York-based"، التي قد يقسمها مُجزئ الكلمات البسيط عند المسافة، على الرغم من أن التقسيم الأفضل (على الأرجح) يكون عند الواصلة.

يُعدّ تقسيم النصوص إلى رموز أمرًا بالغ الصعوبة ، لا سيما في اللغات المكتوبة بنظام الكتابة المتصلة (scriptio continua )، والتي لا تظهر فيها حدود للكلمات، مثل اليونانية القديمة والصينية [ 4 ] والتايلاندية . كما تُزيد اللغات اللاصقة ، مثل الكورية، من تعقيد مهام تقسيم النصوص إلى رموز .

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

مولد المعجم

غالبًا ما تُولَّد المحللات المعجمية بواسطة مولدات المحللات المعجمية ، على غرار مولدات المحللات النحوية ، وكثيرًا ما تُستخدم هذه الأدوات معًا. يُعدّ lex الأكثر شيوعًا ، ويُستخدم مع مولد المحللات النحوية yacc ، أو بالأحرى مع بعض تطبيقاته المتعددة، مثل flex (الذي يُستخدم غالبًا مع GNU Bison ). تُشكّل هذه المولدات شكلًا من أشكال لغات المجال المتخصصة ، حيث تستقبل مواصفات معجمية - عادةً ما تكون تعابير نمطية مع بعض علامات الترميز - وتُنتج محللًا معجميًا.

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

يُعدّ أداء المُحلِّل اللغويّ مصدر قلق، ويُعتبر تحسينه أمرًا بالغ الأهمية، لا سيما في اللغات المستقرة التي يعمل فيها المُحلِّل اللغويّ بشكل متكرر (مثل C أو HTML). تتميز المُحلِّلات اللغوية المُولَّدة بواسطة lex/flex بسرعة معقولة، ولكن يُمكن تحقيق تحسينات تتراوح بين ضعفين إلى ثلاثة أضعاف باستخدام مُولِّدات أكثر دقة. تُستخدم المُحلِّلات اللغوية المكتوبة يدويًا في بعض الأحيان، ولكن مُولِّدات المُحلِّلات اللغوية الحديثة تُنتج مُحلِّلات أسرع من معظم المُحلِّلات المكتوبة يدويًا. تستخدم عائلة مُولِّدات lex/flex نهجًا قائمًا على الجداول، وهو أقل كفاءة بكثير من النهج المكتوب مباشرةً. في النهج الأخير، يُنتج المُولِّد مُحركًا ينتقل مباشرةً إلى الحالات اللاحقة عبر عبارات goto. أثبتت أدوات مثل re2c [ 5 ] قدرتها على إنتاج مُحركات أسرع من المُحركات التي تُنتجها flex بما يتراوح بين ضعفين إلى ثلاثة أضعاف. من الصعب عمومًا كتابة مُحلِّلات لغوية يدويًا تُؤدي أداءً أفضل من المُحركات التي تُنتجها هذه الأدوات الأخيرة.

بنية العبارة

يُقسّم التحليل المعجمي في الأساس تدفق الأحرف المدخلة إلى رموز، حيث يقوم بتجميع الأحرف في مجموعات وتصنيفها. مع ذلك، قد يكون التحليل المعجمي أكثر تعقيدًا؛ ففي أبسط صوره، قد يحذف المحلل المعجمي بعض الرموز أو يُضيف رموزًا جديدة. يُعد حذف الرموز، وخاصة المسافات البيضاء والتعليقات، شائعًا جدًا عندما لا يحتاجها المُصرّف. وفي حالات أقل شيوعًا، قد تُضاف رموز جديدة. ويتم ذلك أساسًا لتجميع الرموز في عبارات ، أو العبارات في كتل، لتبسيط عمل المُحلِّل النحوي.

استمرار السطر

يُعدّ استمرار السطر ميزةً في بعض اللغات حيث يُستخدم السطر الجديد عادةً كفاصل بين العبارات. في أغلب الأحيان، يؤدي إنهاء السطر بشرطة مائلة عكسية (متبوعة مباشرةً بسطر جديد ) إلى استمرار السطر ، أي ربط السطر التالي بالسطر السابق. ويتم ذلك عادةً في المُحلِّل المعجمي: حيث تُهمل الشرطة المائلة العكسية والسطر الجديد، بدلاً من تحليل السطر الجديد إلى رموز. ومن الأمثلة على ذلك لغة باش [ 6 ] ، وبعض البرامج النصية الأخرى، ولغة بايثون [ 7 ] .

إدخال فاصلة منقوطة

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

يُعد إدخال الفاصلة المنقوطة ميزة في لغة BCPL ولغة Go المنحدرة منها ، [ 8 ] على الرغم من أنها غائبة في B أو C. [ 9 ] يوجد إدخال الفاصلة المنقوطة في JavaScript ، على الرغم من أن القواعد معقدة إلى حد ما وتتعرض للكثير من الانتقادات؛ لتجنب الأخطاء، يوصي البعض باستخدام الفواصل المنقوطة دائمًا، بينما يستخدم آخرون الفواصل المنقوطة الأولية، والتي تسمى الفواصل المنقوطة الدفاعية ، في بداية العبارات التي قد تكون غامضة.

يمكن اعتبار إدراج الفاصلة المنقوطة (في اللغات التي تنتهي بعبارات فاصلة منقوطة) واستمرار السطر (في اللغات التي تنتهي بعبارات سطر جديد) متكاملين: فإدراج الفاصلة المنقوطة يضيف رمزًا على الرغم من أن الأسطر الجديدة لا تولد رموزًا بشكل عام، بينما يمنع استمرار السطر توليد رمز على الرغم من أن الأسطر الجديدة تولد رموزًا بشكل عام.

قاعدة التسلل

يمكن تطبيق قاعدة التجاوز (تحديد الكتل بناءً على المسافة البادئة) في المحلل المعجمي، كما هو الحال في بايثون ، حيث يؤدي زيادة المسافة البادئة إلى إصدار المحلل المعجمي رمز INDENT، بينما يؤدي تقليلها إلى إصدار رمز واحد أو أكثر من رموز DEDENT. [ 10 ] تتوافق هذه الرموز مع القوس المفتوح {والقوس المغلق }في اللغات التي تستخدم الأقواس لتحديد الكتل، مما يعني أن قواعد العبارة لا تعتمد على استخدام الأقواس أو المسافة البادئة. يتطلب هذا أن يحتفظ المحلل المعجمي بحالة، أي مكدس لمستويات المسافة البادئة، وبالتالي يمكنه اكتشاف التغييرات في المسافة البادئة عند حدوثها، ولذلك فإن القواعد المعجمية ليست مستقلة عن السياق : إذ يعتمد كل من INDENT وDEDENT على المعلومات السياقية لمستويات المسافة البادئة السابقة.

تحليل معجمي حساس للسياق

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

مع ذلك، توجد استثناءات. من الأمثلة البسيطة إدخال الفاصلة المنقوطة في لغة Go، والذي يتطلب الرجوع إلى رمز واحد؛ ودمج السلاسل النصية المتتالية في لغة Python، [ 7 ] والذي يتطلب الاحتفاظ برمز واحد في مخزن مؤقت قبل إرساله (للتأكد مما إذا كان الرمز التالي سلسلة نصية أخرى)؛ وقاعدة "الجانب الآخر" في لغة Python، والتي تتطلب الاحتفاظ بعدد مستويات المسافة البادئة (في الواقع، مكدس لكل مستوى مسافة بادئة). لا تتطلب هذه الأمثلة سوى السياق المعجمي، ورغم أنها تُعقّد عمل المحلل المعجمي نوعًا ما، إلا أنها غير مرئية للمحلل النحوي والمراحل اللاحقة.

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

انظر أيضاً

مراجع

  1. " تشريح المترجم والمُجزِّئ" . www.cs.man.ac.uk.
  2. الصفحة ١١١، "مبادئ وتقنيات وأدوات المترجمات، الطبعة الثانية" (WorldCat) من تأليف أهو، لام، سيثي، وأولمان، كما ورد في https://stackoverflow.com/questions/14954721/what-is-the-difference-between-token-and-lexeme
  3. "بنية وتفسير برامج الحاسوب" . mitpress.mit.edu . مؤرشف من الأصل بتاريخ 30-10-2012 . تم الاطلاع عليه بتاريخ 07-03-2009 .
  4. هوانغ، سي.، سيمون، ب.، هسيه، س.، وبريفو، ل. (2007) إعادة التفكير في تجزئة الكلمات الصينية: التقطيع، تصنيف الأحرف، أو تحديد فواصل الكلمات
  5. بومبوليس، ب.؛ كوان، د.د. (مارس–ديسمبر 1993). "RE2C: مولد ماسح ضوئي أكثر تنوعًا" . رسائل ACM حول لغات البرمجة والأنظمة . 2 ( 1–4 ): 70–84 . doi : 10.1145/176454.176487 . S2CID 14814637 . 
  6. دليل مرجع Bash ، 3.1.2.1 حرف الهروب
  7. 1 2 "3.6.4 التوثيق" . docs.python.org .
  8. الانتقال الفعال ، " الفواصل المنقوطة "
  9. " الفاصلة المنقوطة في لغة غو "، golang-nuts، روب "القائد" بايك، 12/10/2009
  10. "التحليل المعجمي > المسافة البادئة" . مرجع لغة بايثون . تم الاطلاع عليه بتاريخ 21 يونيو 2023 .

مصادر

  • التجميع باستخدام لغة C# وجافا ، بات تيري، 2005، رقم ISBN 032126360X
  • الخوارزميات + هياكل البيانات = البرامج ، نيكلاوس ويرث، 1975، رقم ISBN 0-13-022418-9
  • بناء المترجم ، نيكلاوس ويرث، 1996، ISBN 0-201-40353-6
  • سيبستا، آر دبليو (2006). مفاهيم لغات البرمجة (الطبعة السابعة) ص  177. بوسطن: بيرسون/أديسون-ويسلي.
  • يانغ، و.؛ تساي، تشي-ووي؛ تشان، جين-تساي (2002). "حول إمكانية تطبيق قاعدة أطول تطابق في التحليل المعجمي" . لغات الحاسوب، والأنظمة، والهياكل . 28 (3): 273-288 . doi : 10.1016/S0096-0551(02)00014-0 . NSC 86-2213-E-009-021 وNSC 86-2213-E-009-079. مؤرشف من الأصل بتاريخ 17 أبريل 2022. تم الاطلاع عليه بتاريخ 4 سبتمبر 2015 .
  • تريم، كريغ (23 يناير 2013). "فنّ التوكنة" . أعمال المطورين . آي بي إم. مؤرشف من الأصل في 30 مايو 2019.
  • مهمة تجزئة ذكر الكلمات ، تحليل