آموزش درخت AST در پایتون 🌳
در این آموزش، یاد میگیریم درخت نحوی انتزاعی (Abstract Syntax Tree) چیست، چه کاربردهایی دارد، و چطور میتوانیم با پایتون از آن استفاده کنیم.
درخت AST چیست؟
درخت AST یک نمایش انتزاعی از کد است که ساختار دستوری آن را توصیف میکند.
هر گره (Node) در درخت AST یک بخش از کد شما را نشان میدهد، مانند:
- متغیرها
- عملیاتها
- توابع
🔧 چرا به AST نیاز داریم؟
- سادهسازی تحلیل کد: حذف جزئیات اضافی مثل پرانتزها.
- ابزار تحلیل کد: برای ابزارهایی مانند Linters یا Code Optimizers بسیار مفید است.
- پایهای برای ساخت مفسر: AST نقش حیاتی در پردازش و اجرای کد ایفا میکند.
چگونه AST در پایتون کار میکند؟
پایتون یک ماژول داخلی به نام
۱. تبدیل کد به درخت AST
میتوانیم کد پایتون را به درخت AST تبدیل کنیم:
🔍 خروجی:
۲. پیمایش درخت AST
با استفاده از
مثال ۱: پیدا کردن متغیرها در کد
🔍 خروجی:
مثال ۲: نمایش تمام عملیاتها
🔍 خروجی:
۳. تغییر درخت AST
درخت AST قابل تغییر است. میتوانید گرهها را تغییر دهید یا جایگزین کنید.
مثال: جایگزینی همه اعداد با عدد ۱۰
🔍 توضیح:
کدی که از درخت جدید ساخته شود، همه اعداد را با عدد ۱۰ جایگزین میکند.
۴. تبدیل درخت AST به کد اجرایی
بعد از تغییر درخت AST، میتوان آن را به کد اجرایی تبدیل کرد:
🔍 خروجی:
کاربردهای AST در دنیای واقعی
1. تحلیل کد:
ابزارهای بررسی کد مانند Flake8 و pylint از AST استفاده میکنند.
2. بهینهسازی کد:
AST میتواند برای اصلاح و بهبود کدها مورد استفاده قرار گیرد.
3. ساخت مفسر:
AST یکی از مهمترین مراحل ساخت مفسر است.
4. ابزارهای تبدیل کد:
مثلاً تبدیل کد قدیمی به نسخههای جدیدتر.
تمرین:
1. کدی بنویسید که تمام توابع تعریفشده در یک فایل پایتون را شناسایی کند.
2. درخت AST یک کد ساده را دستکاری کنید تا همه متغیرها به نام دیگری تغییر یابند.
جمعبندی:
ماژول
🔗 برای ادامه آموزشها، به کانال تلگرام ما بپیوندید!
[لینک کانال]
#PythonAST #CodeAnalysis #PythonTools
در این آموزش، یاد میگیریم درخت نحوی انتزاعی (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)
میتوانید بررسی کنید که آیا کدی استانداردهای خاصی را رعایت میکند یا خیر.
۲. ایجاد ابزارهای بهینهسازی کد
کدی که کاربر نوشته است را تغییر دهید تا سریعتر اجرا شود.
۳. ساخت ابزارهای تحلیل امنیتی
بررسی کنید که آیا کد شامل الگوهای ناامن است یا نه.
۴. تبدیل کدهای قدیمی به نسخههای جدید
مثلاً تغییر کدهایی که برای پایتون ۲ نوشته شدهاند به نسخه ۳.
تمرین پیشرفته:
۱. ابزاری بنویسید که تمام استفادههای متغیر
۲. برنامهای بسازید که همه حلقههای
۳. ابزاری بنویسید که کدهای طولانی را با دستورهای کوتاهتر جایگزین کند.
جمعبندی
با درک پیشرفته درختهای AST، شما میتوانید:
- کد را تحلیل و تغییر دهید.
- ابزارهایی مانند مفسر، بهینهساز کد، و بررسیکننده استاندارد بنویسید.
- حتی قابلیتهای جدیدی به زبان پایتون اضافه کنید.
این سطح از آشنایی با AST، مقدمهای عالی برای مراحل بعدی مثل ساخت مفسر است.
🔗 برای آموزشهای بیشتر، کانال تلگرام ما را دنبال کنید!
[لینک کانال]
#PythonAST #AdvancedPython #CodeOptimization #PythonTools
میتوانید بررسی کنید که آیا کدی استانداردهای خاصی را رعایت میکند یا خیر.
۲. ایجاد ابزارهای بهینهسازی کد
کدی که کاربر نوشته است را تغییر دهید تا سریعتر اجرا شود.
۳. ساخت ابزارهای تحلیل امنیتی
بررسی کنید که آیا کد شامل الگوهای ناامن است یا نه.
۴. تبدیل کدهای قدیمی به نسخههای جدید
مثلاً تغییر کدهایی که برای پایتون ۲ نوشته شدهاند به نسخه ۳.
تمرین پیشرفته:
۱. ابزاری بنویسید که تمام استفادههای متغیر
x
را در یک فایل پایتون پیدا کند. ۲. برنامهای بسازید که همه حلقههای
for
را به حلقههای while
تبدیل کند. ۳. ابزاری بنویسید که کدهای طولانی را با دستورهای کوتاهتر جایگزین کند.
جمعبندی
با درک پیشرفته درختهای AST، شما میتوانید:
- کد را تحلیل و تغییر دهید.
- ابزارهایی مانند مفسر، بهینهساز کد، و بررسیکننده استاندارد بنویسید.
- حتی قابلیتهای جدیدی به زبان پایتون اضافه کنید.
این سطح از آشنایی با AST، مقدمهای عالی برای مراحل بعدی مثل ساخت مفسر است.
🔗 برای آموزشهای بیشتر، کانال تلگرام ما را دنبال کنید!
[لینک کانال]
#PythonAST #AdvancedPython #CodeOptimization #PythonTools
👍1