كيفية إضافة قدرات Traceback / تصحيح الأخطاء إلى لغة مطبقة في بيثون؟

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

سؤال

أنا أستخدم Python لتنفيذ لغة برمجة أخرى تسمى "Foo". سيتم ترجمة جميع كود فو إلى بيثون، وسيتم تشغيلها أيضا في نفس مترجم الثعبان، لذلك سترجم Jit إلى Python.

هنا هو قطعة صغيرة من رمز FOO: giveacodicetagpre.

والتي سوف تترجم إلى: giveacodicetagpre.

WatchDog 'هو فنجر (التعليمات البرمجية التي تم إنشاؤها أيضا في سياق Greenlet) الذي سيقوم بمراقبة / الحد من استخدام الموارد، نظرا لأن اللغة ستستمر في رمز غير موثوق به.

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

لتلبية جميع المورقة، يجب أيضا إضافة قدرات Traceback / تصحيح الأخطاء إلى اللغة، بحيث عندما يلقي وقت تشغيل Python استثناء، ما سيشاهد المستخدم هو رمز FOO's Code Traceback (كما oposed لإظهار رمز Python الذي تم إنشاؤه Traceback ).

اعتبر أن المستخدم ينشئ ملف يدعى "program.foo" مع المحتويات التالية: giveacodicetagpre.

والتي سوف تترجم إلى: giveacodicetagpre.

بعد ذلك، يجب أن يكون إخراج "program.foo" شيء مثل: giveacodicetagpre.

هل هناك طريقة سهلة للقيام بذلك؟ أفضل حل لا ينطوي على تصنيع Python ByTecode، لأنه داخل التنفيذ المترجم، ولكن إذا لم يكن هناك شيء آخر، فسيؤدي ذلك أيضا إلى ذلك.

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

المحلول

You could decorate each generated Python function with a decorator which record the context (filename, function, line number, etc.) to a global stack. Then you could derive your own Exception class and catch it at the top level of the interpreter. Finally, you print out what you like, using information from the global debug stack.

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