تقنية

ast.parse في بايثون: هل نجاح التحليل يضمن الترجمة؟

التحليل يبني عقدة Return داخل if على مستوى الوحدة
شجرة موجودة. [1] [2]

افصل بناء الشجرة عن قبول الترجمة. [1] [2]

الخلاصة السريعة

لا؛ تحليل مثالنا ينجح، وترجمة شجرته تفشل. [1] [2]

  • كتبنا return 7 داخل if True خارج دالة. [1] [2]
  • ast.parse يبني عقدة Return. [1] [2]
  • ترجمة الشجرة ترفع SyntaxError. [1] [2]
  • الضبط داخل دالة يترجم إلى كائن code. [1] [2]
  • اختبرنا 3.12.14؛ لم ننفذ النص المحلل. [1] [2]

المثال

import ast
s="if True:\n return 7\n"
t=ast.parse(s)
r=t.body[0].body[0]
print(type(r).__name__)
try:
 compile(t,"owned","exec")
except SyntaxError:
 print("SyntaxError")

[1] [2]

النطاق خطوة أخرى

المصدر يطلب PyCF_ONLY_AST لبناء الشجرة. الترجمة التالية تفحص النطاق؛ كتلة if لا تصنع دالة. المخرجان Return وSyntaxError. [1] [2]

ترجمة العودة خارج دالة ترفع SyntaxError
نطاق مرفوض. [1] [2]

الضبط المقابل

وضعنا if نفسه داخل def f(): في ضبط مستقل؛ نجحت الترجمة إلى كائن code. نجاح هذه المرحلة لا يشغل النص؛ لم ننفذه. [1] [2]

المراجع

  1. Python 3.12: parsing versus scope checks
  2. CPython 3.12.14: AST-only parse wrapper
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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