سؤال

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

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

المحلول

إذا كنت ترغب في النظر في التعليمات البرمجية، فأنا أعجبت جدا مع إيجيرو سومي mincaml. مترجم.

  • انها فقط 2000 خطوط طويلة.

  • يجمع لغة مصدر مثيرة للاهتمام للغاية.

  • يولد رمز آلة حقيقية، لا شيء من الأشياء namby-pamby c أو llvm :-)

  • سرعة التعليمات البرمجية المترجمة تنافسية مع دول مجلس التعاون الخليجي ومجمعات التحويل البرمجيات OCAML الأصلية.

  • تم تصميم المحول البرمجي للتدريس.

هل ذكرت أنني أعجبت جدا؟

نصائح أخرى

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

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

حوالي 1000 خطوط من التعليمات البرمجية. يجمع مخطط لتجميع LLVM أو إلى C. أود أن أقول أن هذا مناسب ممتاز لورقة على المحامرة. إذا كنت ترغب في الذهاب أعمق، أوصي الكتاب "SICP".

إلقاء نظرة على مترجم بسيط ل PL / 0 (مجموعة فرعية صغيرة مثل Pascal - لا توجد معلمات، بيانات عدد صحيح فقط). المصدر، المكتوبة في Pascal، هو فقط حوالي 500 خط من التعليمات البرمجية، ويسهل اتباعها. قد يكون هذا كل ما تحتاجه للنظر في.

ومع ذلك، إذا كنت ترغب في الذهاب بعيدا قليلا، فقد تكون مرتاحا لذلك، انظر إلى المصدر إلى Pascal-S. هذا مترجم لمجموعة فرعية أكبر من Pascal، ولكنها تتضمن بعض المفاهيم الإضافية، مثل مرافقة المعلمة وأنواع البيانات الإضافية والمصفوفات والسجلات (الهياكل). لا يزال الأمر يبعد فقط 2000 سطر من التعليمات البرمجية، ويسهل اتباعها بمجرد إتقان PL / 0.

يمكنك العثور على المصادر هنا:

http://standardardpascal.org/source.html.

هناك الكثير يمكنك استخدامه، ما ستجده أسهل سيعتمد على تجربتك.

أولا فيما يتعلق باللغة:

  1. أبسط هي لغة لعبة، على سبيل المثال تجميع تعبيرات حسابية.
  2. التالي هو المجمع - مرة أخرى مجرد ترجمة فقط ولكن يظهر أساسيات التحليل والانتقال إلى رموز OP
  3. التالي هو ربما شيء مثل C، وهو قريب جدا من المجمع النقي، أو شيء مثل LISP وهو قريب جدا من النظرية النقية.

بعد ذلك، اختيار التحويل البرمجي الخاص بك.

يمكنك أن تبدأ مع المجمع - تشغيل المجمع إلى رمز الجهاز. كانت هذه هي الخطوة الأولى في مجال الترجمة - أود أن أقترح رقاقة مثل 6502 أو 8080 التي هي بسيطة للغاية. شيء مثل مجموعة تطوير المجمع قد تعمل بشكل جيد بالنسبة لك (يأتي مع أمثلة)

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

تبدأ كل مقدمة تقريبا في كتابة المحامرة في المستوى الأكاديمي بلغة ضئيلة كمثال، كتاب التنين http://en.wikipedia.org/wiki/dragon_book_٪28Computer_science٪29 ينصح دائما، ولكن هناك جيدة أخرى.

في الجامعة استخدمت C-- وهو مثل ج ولكن حتى أسهل في كتابة مترجم ل. الكثير من الموارد في: http://www.cminusminus.org/qc--.html.

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

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

أوصي "كتاب التنين": مبادئ تصميم مترجم, بقلم أهو وأولمان. لقد مرت سنوات عديدة منذ قرأتها، لذلك لا أتذكر بالضبط ما هي الأمثلة المتاحة، لكنها نص جيد للغاية.

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

في كلية تكنولوجيا المعلومات السابقة، كان علينا تطوير مترجم في C ++، ولكن ليس من الصفر: كانت هناك خطوات، منحنى التعلم وما إلى ذلك.

مفهوم مترجم النمر و تعيينات projet.

جميع الوثائق متوفرة، ولكن الكود نفسه ليس كذلك، لذلك يجب عليك القيام بذلك بنفسك.

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

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

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

قد تنظر إلى مثال الآلة الحاسبة في كتاب Bjarne Stroustrup الضخم "لغة البرمجة C ++".

إذا كنت تريد شيئا أكثر تقدما، اقرأ شفرة المصدر في دفعة :: الروح.

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

ماذا عن النظر في مترجم C صغير؟ ج ليست مكونة جدا وأعتقد أن هذا سوف يمنحك بعض البصيرة في بناء مترجم.

لقد بدأت برنامج تعليمي فيديو في كتابة مترجم Antlr 3.x - تحقق من

http://javadude.com/articles/antlr3xtut.

سأضيف المزيد لذلك قريبا! - سكوت

يمكنك أيضا تجربة هذا الكتاب: عناصر أنظمة الحوسبة.

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

الفصل 10: تحليل بناء الجملة هو ما يمكنك العمل فيه، إذا كنت تنوي التركيز فقط على الجزء الأمامي المترجم. لكن، الفصل 9 يجب أن يكون متطلب مسبقا لأنه يصف تصميم لغة عالية المستوى الذي يتم فيه تنفيذ مترجم. هذه اللغة الرفيعة المستوى هي في الواقع لعبة oo java مثل اللغة مثل التحويل البرمجي في الواقع يجمع في الواقع إلى VM.

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

ويمكنك العثور على مراجعتي للكتاب هنا.

brainfucked. هو مترجم للغة البسيطة للغاية brainfuck..

المورد الفائض Stack القياسي للموارد على الكتابة المترجم هو تعلم كتابة مترجم

ال أصغر مترجم عملي أعرفه هو metaii, ، التي تحتوي على 40 خط وصفا خاصا ويمكنه تجميع نفسها، باستخدام نظام وقت التشغيل الخاص الذي يدل على أنه يخفي بعض الحسابات المثيرة للاهتمام (ولكن بعد ذلك، فإن معظم المحامرة المدرجة هنا تفترض نوعا ما من نظام وقت التشغيل، بثبات أكبر من واحد عن Metaii. لقد قمت بإنشاء مترجم حقيقي يبدأ بهذا كمؤسسة، على الرغم من تعزز المعزة ذاتيا بشكل مذهل.

هناك كان العمل لجعل ذلك أصغر. لا أعتقد أن هناك أي محامرة عملية تستند إلى هذا الاتجاه.

هذه تستحق كتابة ورقة عنه.

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