Python3
200 subscribers
100 photos
6 videos
26 files
518 links
🎓 آموزش و پروژه‌های Python
آموزش‌های کاربردی و پروژه‌های عملی Python برای همه سطوح. 🚀
Download Telegram
آموزش درخت AST در پایتون 🌳

در این آموزش، یاد می‌گیریم درخت نحوی انتزاعی (Abstract Syntax Tree) چیست، چه کاربردهایی دارد، و چطور می‌توانیم با پایتون از آن استفاده کنیم.



درخت AST چیست؟
درخت AST یک نمایش انتزاعی از کد است که ساختار دستوری آن را توصیف می‌کند.
هر گره (Node) در درخت AST یک بخش از کد شما را نشان می‌دهد، مانند:
- متغیرها
- عملیات‌ها
- توابع

🔧 چرا به AST نیاز داریم؟
- ساده‌سازی تحلیل کد: حذف جزئیات اضافی مثل پرانتزها.
- ابزار تحلیل کد: برای ابزارهایی مانند Linters یا Code Optimizers بسیار مفید است.
- پایه‌ای برای ساخت مفسر: AST نقش حیاتی در پردازش و اجرای کد ایفا می‌کند.


چگونه AST در پایتون کار می‌کند؟
پایتون یک ماژول داخلی به نام ast دارد که برای کار با درخت‌های AST طراحی شده است.

۱. تبدیل کد به درخت AST
می‌توانیم کد پایتون را به درخت AST تبدیل کنیم:

import ast

code = """
x = 5 + 3
if x > 5:
print(x)
"""

# تبدیل کد به درخت AST
tree = ast.parse(code)

# نمایش درخت AST
print(ast.dump(tree, indent=4))

🔍 خروجی:
Module(
body=[
Assign(
targets=[Name(id='x', ctx=Store())],
value=BinOp(left=Constant(value=5), op=Add(), right=Constant(value=3))
),
If(
test=Compare(
left=Name(id='x', ctx=Load()),
ops=[Gt()],
comparators=[Constant(value=5)]
),
body=[Expr(value=Call(func=Name(id='print', ctx=Load()), args=[Name(id='x', ctx=Load())], keywords=[]))],
orelse=[]
)
]
)



۲. پیمایش درخت AST
با استفاده از ast.walk یا ast.NodeVisitor می‌توانید درخت AST را پیمایش کنید:

مثال ۱: پیدا کردن متغیرها در کد
for node in ast.walk(tree):
if isinstance(node, ast.Name):
print(f"Variable found: {node.id}")

🔍 خروجی:
Variable found: x
Variable found: x
Variable found: print

مثال ۲: نمایش تمام عملیات‌ها
for node in ast.walk(tree):
if isinstance(node, ast.BinOp):
print(f"Operation: {type(node.op).__name__}")

🔍 خروجی:
Operation: Add



۳. تغییر درخت AST
درخت AST قابل تغییر است. می‌توانید گره‌ها را تغییر دهید یا جایگزین کنید.

مثال: جایگزینی همه اعداد با عدد ۱۰
class Transformer(ast.NodeTransformer):
def visit_Constant(self, node):
if isinstance(node.value, int):
return ast.Constant(value=10)
return node

transformer = Transformer()
new_tree = transformer.visit(tree)

# نمایش درخت جدید
print(ast.dump(new_tree, indent=4))

🔍 توضیح:
کدی که از درخت جدید ساخته شود، همه اعداد را با عدد ۱۰ جایگزین می‌کند.



۴. تبدیل درخت AST به کد اجرایی
بعد از تغییر درخت AST، می‌توان آن را به کد اجرایی تبدیل کرد:

import astor  # برای تبدیل AST به کد خوانا

# تبدیل درخت به کد
new_code = astor.to_source(new_tree)
print(new_code)

🔍 خروجی:
x = 10 + 10
if x > 10:
print(x)



کاربردهای AST در دنیای واقعی
1. تحلیل کد:
ابزارهای بررسی کد مانند Flake8 و pylint از AST استفاده می‌کنند.
2. بهینه‌سازی کد:
AST می‌تواند برای اصلاح و بهبود کدها مورد استفاده قرار گیرد.
3. ساخت مفسر:
AST یکی از مهم‌ترین مراحل ساخت مفسر است.
4. ابزارهای تبدیل کد:
مثلاً تبدیل کد قدیمی به نسخه‌های جدیدتر.



تمرین:
1. کدی بنویسید که تمام توابع تعریف‌شده در یک فایل پایتون را شناسایی کند.
2. درخت AST یک کد ساده را دستکاری کنید تا همه متغیرها به نام دیگری تغییر یابند.


جمع‌بندی:
ماژول ast در پایتون یک ابزار قدرتمند برای تحلیل و تغییر کد است. این ابزار به شما اجازه می‌دهد کد را از سطح متن به ساختار درختی تبدیل کنید و بر آن عملیات انجام دهید. اگر درک خوبی از AST داشته باشید، گام بزرگی به سمت ساخت ابزارهایی مثل مفسر یا ابزارهای تحلیل کد برداشته‌اید.

🔗 برای ادامه آموزش‌ها، به کانال تلگرام ما بپیوندید!
[لینک کانال]
#PythonAST #CodeAnalysis #PythonTools
👍1
۱. ساخت ابزارهای بررسی کد (Linters)
می‌توانید بررسی کنید که آیا کدی استانداردهای خاصی را رعایت می‌کند یا خیر.

۲. ایجاد ابزارهای بهینه‌سازی کد
کدی که کاربر نوشته است را تغییر دهید تا سریع‌تر اجرا شود.

۳. ساخت ابزارهای تحلیل امنیتی
بررسی کنید که آیا کد شامل الگوهای ناامن است یا نه.

۴. تبدیل کدهای قدیمی به نسخه‌های جدید
مثلاً تغییر کدهایی که برای پایتون ۲ نوشته شده‌اند به نسخه ۳.



تمرین پیشرفته:
۱. ابزاری بنویسید که تمام استفاده‌های متغیر x را در یک فایل پایتون پیدا کند.
۲. برنامه‌ای بسازید که همه حلقه‌های for را به حلقه‌های while تبدیل کند.
۳. ابزاری بنویسید که کدهای طولانی را با دستورهای کوتاه‌تر جایگزین کند.



جمع‌بندی
با درک پیشرفته درخت‌های AST، شما می‌توانید:
- کد را تحلیل و تغییر دهید.
- ابزارهایی مانند مفسر، بهینه‌ساز کد، و بررسی‌کننده استاندارد بنویسید.
- حتی قابلیت‌های جدیدی به زبان پایتون اضافه کنید.

این سطح از آشنایی با AST، مقدمه‌ای عالی برای مراحل بعدی مثل ساخت مفسر است.

🔗 برای آموزش‌های بیشتر، کانال تلگرام ما را دنبال کنید!
[لینک کانال]
#PythonAST #AdvancedPython #CodeOptimization #PythonTools
👍1