كيف يمكنني جعل بلدي مترجم C ++ فهم القوالب، والطبقات المتداخلة، وما إلى ذلك ميزات قوية من C ++؟

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

سؤال

وومهمة الجامعة في مجموعتي لكتابة مترجم من C مثل اللغة. بالطبع انا ذاهب لتنفيذ جزء صغير من الحبيبة C ++.
مهمة بالضبط هي غبية للغاية، وقال المحاضر لنا أنه من الضروري أن تكون-تحويل البرمجي النفس (ينبغي أن تكون قادرة على تجميع نفسها) - لذلك، كان يعني عدم استخدام المكتبات مثل تعزيز وSTL.
كما انه لا يريد لنا أن استخدام قوالب لأنه من الصعب تنفيذها.
والسؤال هو - هل هو حقيقي بالنسبة لي، وأنا موجود أريد أن أكتب هذا المشروع في بلدي، مع الموعد النهائي في نهاية مايو - منتصف يونيو (هذا العام)، لتنفيذ ليس فقط القوالب، ولكن تداخل أيضا الطبقات، ومساحات، وظائف الجداول الافتراضية على مستوى تحليل تركيب منتديات PS I لست noobie في C ++

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

المحلول

والتمسك به مترجم C.

وصدقوني، انها ما يكفي من العمل الجاد في بناء مترجم C لائق، <م> خاصة إذا المتوقع لتجميع نفسها. سوف تحاول دعم كافة ميزات C ++ مثل الطبقات المتداخلة والقوالب تدفع لك مجنون. ربما مجموعة يمكن أن يفعل ذلك، ولكن لوحدك، وأعتقد أن المترجم C هو أكثر من كافية للقيام به.

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

نصائح أخرى

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

و"أنا موجود أريد أن أكتب هذا المشروع على بلدي" - قال لكم انه مشروع جماعي. أنت تقول أن مجموعتك لا يريد أن يذهب مع وجهة نظركم أنه ينبغي أن يتحول إلى C ++، لذلك كنت تقلع وتعمل لوحدك؟ هناك نوعا آخر كنت توصي تغيير.

لا يهم كيف الاطلاع كنت على وشك C ++. قدرتك مع قواعد النحو، موزعي، lexers، ASTS، ورمز جيل يبدو أكثر وثيق بكثير.

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

إذا الانتهاء في وقت مبكر، والوفاء بالتزاماتها لفريقك، وانا اقول يجب ان لا تتردد في تعديل ما أنتج لإضافة ميزات C ++.

وأراهن أنها أخذت بيارن ستروستروب أكثر من ثلاثة أشهر لإضافة كائنات إلى C. لا نبالغ نفسك أو نقلل من التنازل الأصلي.

ولا توجد مشكلة. وعلى الرغم من كنت في ذلك، لماذا لا تنفيذ نظام التشغيل من أجل أن يعمل على أيضا.

واتبع المهمة. إرسال مترجم ل<م> C مثل اللغة! ما أريد القيام به هو اختيار فرعية من C. إزالة أنواع البيانات الفاصلة العائمة وكل ميزة أخرى ليست ضرورية في بناء المترجم الخاص بك.

والكتابة مترجم C هو الكثير من العمل. فلن تكون قادرة على القيام بذلك في غضون شهرين. كتابة مترجم C ++ هو مجنون بصراحة. أنت لن تكون قادرة على القيام بذلك في غضون 5 سنوات.

وأنا لن أود أن أؤكد على بعض النقاط التي سبق ذكرها، وإعطاء إشارات قليلة.

1) التمسك 1989 ANSI C STANDARD مع NO OPTIMIZATION.

2) لا تقلق، مع التوجيه السليم، التنظيم الجيد وقدرا كبيرا من العمل الشاق وهذا هو قابل للتحقيق.

و3) قراءة وC لغة برمجة غطاء لتغطية.

و4) فهم المفاهيم الهامة للتنمية مترجم من التنين كتاب .

و5) نلقي نظرة على LCC كل من رمز وكذلك < وأ href = "https://rads.stackoverflow.com/amzn/click/com/0805316701" يختلط = "noreferrer"> كتاب .

و6) نلقي نظرة على ليكس وياك (أو فليكس وبيسون)

و7) كتابة مترجم C (تصل إلى النقطة التي يمكن النفس تجميع) هو شعيرة من شعائر المرور بين المبرمجين. يتمتع بها.

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

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

ويجب أن تكون قادرة على استكمال تشبه ج لغة ضمن الإطار الزمني. على افتراض انك تأخذ أكثر من 1 بطبيعة الحال، وهذا هو بالضبط ما كنت قد تكون قادرة على القيام في الوقت المناسب. C ++ هي أيضا قابلة للتنفيذ ولكن مع الكثير من اضافية ساعات لوضعها. Expecing للقيام ج قوالب / وظائف افتراضية + + هو overexpecting نفسك وكنت قد تفشل في المهمة كل ذلك معا. لذلك فمن الأفضل عصا مع مترجم ج فرعية والانتهاء منه في الوقت المناسب. يجب عليك أن تنظر أيضا في الوقت الذي يستغرقه لQA. إذا كنت تريد أن تكون QA شامل في حد ذاته سوف تأخذ أيضا الوقت المناسب.

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

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

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