سؤال

في اللغة المرجعية إلى الأمام مثل C #، كيف يتعامل المحول البرمجي هذا؟ ما هي الخطوات التي يعمل فيها المحول البرمجي؟

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

المحلول

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

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

بعد أن تتمكن من Typecheck أو تحقق مما إذا كانت بعض الرموز لا تزال معلقة (لذلك لا يوجد تعريف حقيقي، ويمكنك رفع خطأ دلالي) ..

نصائح أخرى

يفعل ذلك من خلال القيام بتاريخ اثنين من التجميع. أول تمرير يوزع التعليمات البرمجية وجمع جميع المعرفات المستخدمة. التمرير الثاني يحل جميع المعرفات.

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

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

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