سؤال

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

آخر مرة حاولت مشفرة في c++ و الدول و جملة استغرق ما يقرب طالما الكتابة الفعلية المنطق.أنا أعرف اتبع الأدوات المساعدة.

كنت أفكر في إنشاء رمز c++ و دول مجلس التعاون الخليجي تجميع ذلك.باستخدام الأدوات المذكورة أعلاه كم من الوقت يمكنك تقدير سيستغرق لكتابة البرنامج أو البرنامج النصي اللغة ؟


تنويعات على هذا السؤال قد طلبت مرارا وتكرارا ، تعلم الكتابة مترجم. هنا قائمة غير كاملة من الموارد عن هذا الموضوع.

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

المحلول

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

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

بعض الكتب الكلاسيكية على بناء المجمعين هي:

نصائح أخرى

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

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

آخر خيار جيد إذا كنت تكتب مترجم فقط استخدام إدارة الذاكرة وغيرها من المرافق الأساسية الخاصة بك لغة البرمجة.تحليل إلى AST ثم تفسير من شجرة الأقدام من AST.وهذا سوف تحصل بعيدا عن الارض بسرعة.الأداء لم يكن أعظم, لكنه مقبول.(استخدام هذا الأسلوب كتبت حاشية المترجم في Modula-3.تنفيذ أول استغرق أسبوع و على الرغم من أنه خضع في وقت لاحق بعض وضبط الأداء في المقام الأول في lexer ، فإنه لم يتم استبداله.)

تجنب LALR محلل المولدات ؛ استخدام ما يحفظ وقتك مثل ANTLR أو ف GLR محلل مولد.

من الكتب الكلاسيكية على مترجم التصميم

"مبادئ مترجم التصميم" ألفريد V.آهو و جيفري دي.أولمان.إنه تم في جميع أنحاء لبعض الوقت الآن و الوردي فارس التنين الأخضر معروفة على الأقل بضعة أجيال من CS الطلاب.

أيضا...

"المجمعين:المبادئ والتقنيات والأدوات" ألفريد V.أهو مونيكا S.لام رافي سيتي ، جيفري دي.أولمان

إذا كنت مهتما في كتابة المترجم ثم هذه هي بلا شك أفضل الأماكن لبدء.

كما شخص الذي يعرف C++ بشكل جيد جدا ، ما هي النصائح التي يمكن أن تعطي الشخص الذي تتطلع إلى كتابة البرمجة أو البرنامج النصي اللغة ؟

لا تفعل ذلك.(أو على الأقل أن تفكر مليا قبل أن تفعل!)

إذا كنت تحاول كتابة لغة البرمجة لفضح أساليب/خصائص بعض كتب مخصصة الكائنات ، سيكون من الأفضل لتنفيذ تلك في جافا (أو .NET/VB أو كل تلك رديء Microsoftisms) ثم استخدم واحدة من فول إطار البرمجة لغات مثل لغة البرمجة.(مع كل ما يعادل Microsoft نهاية.)

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

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

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

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

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

أعتقد أن الجميع في عداد المفقودين نقطة واحدة مهمة جدا.

لماذا هل تريد أن يكتب مترجم / مترجم / محلل الخ.

هذا على محمل الجد تحديد الكثير من ما كنت تفعل.

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

العديد من الكتب المتوفرة.واحد كنت أحب بايت الكتاب :الخيوط تفسير لغات - أراهن أنها من الطباعة.

برنامج نصي بسيط محركات يمكن أن تكون وضعت مع عدد قليل من مساء التفكير و قليلا من التجربة والخطأ.

ولكن أراهن أن هناك دورات على الانترنت الآن الذي سيوفر لك طن من الوقت.

أود أن أوصي بشدة تبحث في القائمة بايت كود المترجمين.إذا كنت يمكن أن تجعل النظام الخاص بك لغة تناسب CIL (.NET) أو جافا (أو حتى الآخرين مثل الثعبان أو الببغاء) ، سوف توفر على نفسك كل هذا الجهد من إجراء عملية دعم البيئة و يمكن الحصول على تجريب اللغة المفاهيم.

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

أداة جيدة أن كنت تستخدم LALR هو الذهب تحليل النظام.انها حرة ، نحوي هو باكوس-Naur شكل ، وهناك أمثلة متعددة ، بما في ذلك محركات مكتوب في C# ، VB.NET جافا وغيرها.هذا يتيح لك كتابة نحوي, ترجمة نحوي إلى ملف ثم استخدام محرك تحليل نحوي.

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

حظا سعيدا

إذا كنت لا ترغب في الحصول على في كتابة المترجم للحد من لغة إلى الجمعية/آلة, ثم لديك الخيار التالي هو كتابه المترجم إلى بايت كود لغة الجهاز الظاهري ، مثل JVM ، PVM أو .صافي.

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

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