هل هناك طريقة يمكنني تعديل البيوتار وتكون مرافقة Tokenstream؟

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

سؤال

سؤالي هو سؤال تنفيذ اللغة وسؤال API Antlr4. هل هناك طريقة يمكنني تعديل الحزب وتصفح Tokenstream؟

هنا هو السيناريو. لدي لغة بسيطة تحدد برنامج Dataflow. يمكنك رؤيته على github ، إذا كنت فضوليا. أنا ليكس وتحليل اللغة مع Antlr4. يمكنني استخدام المستمعين للمشي شجرة التحليل وتقييم التعليمات البرمجية.

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

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

مشكلة أخرى أواجهها هي الحاجة إلى أن تكون قادرا على إخراج الحالة الحالية AST ك Code Code في أي وقت في الوقت المناسب (الأداة التي أضمها اللغة التي يجب أن تكون قادرا على الحفظ.) أنا أستخدم StringTemplate ل توليد الكود من كائنات تعريفي. أعتقد أنني يجب أن أكون قادرا على جعل Stry Strend Tree Tree.

بشكل عام، أحتاج إلى lex، وتحليل، وتقييم، واسعة، وتقييم، وإنشاء رمز كل من داخل وقت تشغيل بلدي.

بدلا من إنشاء كائنات تعريفي الخاصة، أتساءل ما هو أفضل نهج هو تعديل Paretree / Tokenstreams؟

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

المحلول

راجعت لغتك. يبدو بسيطا جدا، وأنا أفترض أنه.

من الوصف الخاص بك أنا أعمل على أساس أن IDE سيعمل مباشرة على الشجرة. بالنظر إلى أن هذا هو الحاجة:

  1. محلل لغتك، لتحويل شفرة المصدر إلى شجرة. يمكن أن يقوم Antlr بذل هذا الأمر، لكن قد تحتاج إلى بناء شجرة الخاصة بك بدلا من الاعتماد على ما يتم توفيره. كتابة المحلل اللغوي الخاص بك ليس بالأمر الصعب.
  2. قواعد إعادة كتابة الأشجار. سلسلة من التحولات المسموح بها للشجرة التي تضمن أنها لا تزال صالحة. يمكن أن يكون هذا في شكل واجهة برمجة تطبيقات تعمل على الشجرة. هذا http://www.program-transformation.org/transform/trerewriting قد يكون مفيدا .
  3. توليد التعليمات البرمجية المصدر. القدرة على إعادة بناء التعليمات البرمجية المصدرية من الشجرة. إذا كنت بحاجة إلى الحفاظ على التعليقات والتنسيق ثم إما (أ) تتضمنها في قواعد اللغة القواعد (ب) تم دمج التعليمات البرمجية المصدرية التي تم إنشاؤها مع رمز مؤلف.
  4. النتيجة النهائية هي أنه يمكنك إجاوبة أي تغيير في رمز المصدر أو الشجرة التي تم إنشاؤها. إذا كنت تعتقد أن هذا كثير من العمل، فهو. ومع ذلك، فإن الأساس للعديد من الأدوات الأخرى التي تهدف إلى توفير هذه المرافق. نعمة الادخار هي أن لغتك بسيطة.

نصائح أخرى

ليس لدينا وسيلة لتغيير تحليل شجرة بأمان في الوقت الحالي.من الأفضل أن تستمد نسخة جديدة من القديم.يجب عليك أيضا إلقاء نظرة على المحرك الرمز المميز لإعادة الكتابة. ter

الإجابة القصيرة على سؤالك هو نعم، ولكن كما تهدأ، سيكون مؤلما وهشا.

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

بينما قد يبدو هذا كعملية باهظة الثمن، فإن Antlr سريعا للغاية.يعمل الكسوف على وجه الخصوص جيدا مع هذا النهج - لقد استخدمته مع عدد من محرري DSL دون أي تأثير ملحوظ على أداء المحرر.تحدث التحليل بالكامل على مؤشر ترابط الخلفية.يتم تحديث Projectioners Editor فقط عندما يكون هناك توقف كاف في مؤشر ترابط Forground Editing.يجب أن تكون netbeans متشابهة.

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