ما هي بعض الأمثلة على الأخطاء التي يمكن للتحليل المعجمي اكتشافها؟

StackOverflow https://stackoverflow.com/questions/1526333

سؤال

ما هي بعض الأمثلة على الأخطاء التي يمكن للتحليل المعجمي اكتشافها في جزء معين من التعليمات البرمجية بلغة مثل Java أو C ++ أو C؟

هل كانت مفيدة؟

المحلول

يمكن ل Lexer اكتشاف تسلسل الأحرف التي لا تحتوي على معنى ممكن (حيث يتم تحديد المعنى من قبل المحلل المحلل). على سبيل المثال، في جافا، التسلسل bana"na لا يمكن أن يكون معرف، كلمة رئيسية، مشغل، إلخ.

ومع ذلك، لا يمكن ل Lexer اكتشاف أن رمزية صالحة معينة من المعالم غير ذي صلة أو غير مجدية. لذا فإن جافا ليكسر، على سبيل المثال، سيعود بسعادة تسلسل الرموز final "banana" final "banana", ، رؤية كلمة رئيسية، سلسلة ثابتة، كلمة رئيسية، ثابتة سلسلة على التوالي.

نصائح أخرى

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

مشكلة أخرى هي حالة أنواع البيانات المعرفة من قبل المستخدم، والتي تحتاج إلى التعامل معها معا من قبل Lexer والتحلل. النظر في التعليمات البرمجية التالية:

typedef int myinteger؛ myinteger x؛

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

القضية الثالثة تتعلق سياق الرمز المميز. في لغة حساسة للسياق مثل C ++، يمكن أن يكون لها نفس الرمز المميز (على سبيل المثال <) معنى مختلف (أقل من، بداية معلمة القالب). يحتاج ذلك أيضا إلى التعامل معه في التعاون مع المحلل المحلل، والذي يمكنه تقديم ملاحظات إلى Lexer على الدولة الحالية.

لم أقم بفحص القواعد الذهنية، لكنني أعتقد أن سلسلة مثل "2cat"، على سبيل المثال، ليست أي نوع من الرمز المميز صالح / المتوقع / المصنف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top