سؤال

قرأت في كتاب سيبستا, ، أن المترجم يقضي معظم وقته في رمز مصدر Lexing. لذلك، تحسين Lexer هو ضرورة، على عكس محلل بناء الجملة.

إذا كان هذا صحيحا، فلماذا تأخذ مرحلة التحليل المعجمي الكثير من الوقت مقارنة بتحليل بناء الجملة بشكل عام؟

أقصد تحليل بناء الجملة عملية الاشتقاق.

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

المحلول

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

عند مقارنة التحليل المعجمي والنزاهي، قد يكون الأمر بالفعل هو الحال أن التحليل المعجمي أكثر تكلفة. وذلك لأن كلاهما يستخدم آلات الدولة، أي هناك عدد ثابت من الإجراءات لكل عنصر، ولكن عدد العناصر أكبر بكثير في التحليل المعجمي (الأحرف) من التحليل النحوي (الرموز).

نصائح أخرى

التحليل المعجمي هو العملية التي يتم فيها تحويل جميع الأحرف الموجودة في التعليمات البرمجية المصدر إلى الرموز. على سبيل المثال

foreach (x in o)

قراءة الشخصية حسب الحرف - "F"، "O"، إلخ.

يجب أن يحدد المحلل المعجمي الكلمات الرئيسية التي يتم رؤيتها ("foreach"، وليس "ل" وما إلى ذلك).

بحلول الوقت الذي يحدث فيه التحليل النحوي رمز البرنامج هو "فقط" سلسلة من الرموز. ومع ذلك، وأنا أتفق مع الإجابة أعلاه أن التحليل المعجمي ليس بالضرورة أكثر عملية تستغرق وقتا طويلا، فقط لديها أكبر دفق للعمل معه.

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

بالتأكيد اعتاد أن يكون هذا هو الحال الذي كان Lexing باهظ الثمن. جزء من ذلك كان يتعلق بالذاكرة المحدودة وعمليات ملف متعددة لقراءة في أجزاء البرنامج. الآن يتم قياس الذاكرة في غيغابايت، لم تعد هذه مشكلة وللسبب نفسه يمكن القيام به الكثير من العمل، لذلك التحسين هو أكثر أهمية. بالطبع، ما إذا كان التحسين يساعد الكثير هو سؤال آخر.

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