تحليل كود Lua بشكل ثابت بحثًا عن الأخطاء المحتملة

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

سؤال

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

أدرك أن اللغات الديناميكية تقاوم إلى حد كبير تحليل التعليمات البرمجية الثابتة بالطريقة التي يمكن بها تحليل كود C++ على سبيل المثال.

كنت آمل أن تكون هناك أداة تعمل من خلال برنامج Lua النصي وعلى سبيل المثال.يحذر من المتغيرات التي لم يتم تعريفها في سياق برنامج نصي معين.

ما أبحث عنه بشكل أساسي هو أداة للبرنامج النصي:

local a
print b

سوف يخرج:

warning: script.lua(1): local 'a' is not used'
warning: script.lua(2): 'b' may not be defined'

يمكن أن تكون مجرد تحذيرات لمعظم الأشياء ولكن ذلك سيظل مفيدًا!هل توجد مثل هذه الأداة؟أو ربما Lua IDE مع ميزة مثل تلك المضمنة؟

شكرا كريس

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

المحلول

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

غوغلينغ ل "الوبر لوا" ينتج هاتين الأداتين: <ل أ href = "http://code.google.com/p/lua-checker/" يختلط = "noreferrer"> المدقق لوا و <لأ href = "http://lua-users.org/wiki / LuaLint "يختلط =" noreferrer "> لوا الوبر .

وقد تحتاج إلى لفة أداة الخاصة بك لتلبية الاحتياجات المحددة الخاصة بك ولكن.

Metalua هي واحدة من أقوى الأدوات لتحليل رمز لوا ثابت. على سبيل المثال، يرجى الاطلاع على metalint ، وأداة للاستخدام متغير عمومي تحليل.

يرجى عدم التردد في الرد على سؤالك في Metalua القائمة البريدية . الناس هناك عادة مفيدة جدا.

نصائح أخرى

وهناك أيضا لوا-تفقد ، الذي يقوم على أساس metalua الذي تم ذكره سابقا. لقد أدرجتها في ZeroBrane ستوديو IDE ، الذي يولد إخراج مشابه جدا لما كنت تتوقع. انظر هذه الإجابة SO لمزيد من التفاصيل: https://stackoverflow.com/a/11789348/1442917

للتحقق من الكرات العالمية، راجع هذا النشر لوا ل.التحقق من السكان المحليين أصعب.

تحتاج إلى العثور على محلل لـ lua (يجب أن يكون متاحًا كمصدر مفتوح) واستخدامه لتحليل البرنامج النصي إلى شجرة AST مناسبة.استخدم هذه الشجرة ومتتبع رؤية المتغير البسيط لمعرفة متى يتم تعريف المتغير أو عدم تعريفه.

عادةً ما تكون قواعد النطاق بسيطة:

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

سيزودك هذا بالمتغيرات المرئية داخل AST.يمكنك استخدام هذه المعلومات وإذا قمت أيضًا بفحص تعبيرات عقد AST (قراءة/كتابة المتغيرات) يمكنك معرفة معلوماتك.

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