موضوع مقاله: درخت نحو انتزاعی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # درخت نحو انتزاعی | مقدمه: "انتزاعی" بودن نحو به این معناست که تمام جزئیات ظاهر شده در نحو واقعی را نشان نمی‌دهد، بلکه فقط جزئیات ساختاری یا مرتبط با محتوا را نشان می‌دهد. | ## بخش 1: درخت نحو انتزاعی | به عنوان مثال، پرانتزهای گروه‌بندی به طور ضمنی در ساختار درختی هستند، بنابراین لازم نیست که به عنوان گره‌های جداگانه نمایش داده شوند. این امر درختان نحو انتزاعی را از درختان نحو انضمامی که به طور سنتی درختان تجزیه نامیده می‌شوند، متمایز می‌کند. درختان تجزیه معمولاً توسط یک تجزیه‌کننده در طول فرایند ترجمه و کامپایل کد منبع ساخته می‌شوند. پس از ساخته شدن، اطلاعات اضافی با پردازش بعدی، به عنوان مثال، تجزیه و تحلیل زمینه‌ای به AST اضافه می‌شود. درختان نحو انتزاعی نیز در تجزیه و تحلیل برنامه و سیستم‌های تبدیل برنامه استفاده می‌شوند. برنامه‌های کاربردی در کامپایلرها درخت‌های نحو انتزاعی، ساختارهای داده‌ای هستند که به طور گسترده در کامپایلرها برای نمایش ساختار کد برنامه استفاده می‌شوند. یک AST معمولاً نتیجه فاز تحلیل نحوی یک کامپایلر است و اغلب به عنوان یک نمایش میانی از برنامه از طریق چندین مرحله که کامپایلر به آن نیاز دارد، عمل می‌کند و تأثیر زیادی بر خروجی نهایی کامپایلر دارد. انگیزه یک AST دارای چندین ویژگی است که به مراحل بعدی فرآیند کامپایل کمک می‌کند: یک AST را می توان با اطلاعاتی مانند ویژگی‌ها و حاشیه‌نویسی برای هر عنصری که حاوی آن است ویرایش و بهبود بخشید. چنین ویرایش و حاشیه‌نویسی با کد منبع یک برنامه غیرممکن است، زیرا به معنای تغییر آن است. در مقایسه با کد منبع، یک AST شامل علائم نقطه‌گذاری و جداکننده‌های غیرضروری (پرانتز، نقطه ویرگول، پرانتز و غیره) نمی‌شود. | ## بخش 2: درخت نحو انتزاعی | یک AST معمولا به دلیل مراحل متوالی تجزیه و تحلیل توسط کامپایلر، حاوی اطلاعات اضافی در مورد برنامه است. به عنوان مثال، ممکن است موقعیت هر عنصر را در کد منبع ذخیره کند تا به کامپایلر امکان چاپ پیام‌های خطای مفید را بدهد. AST ها به دلیل ماهیت ذاتی زبان‌های برنامه‌نویسی و مستندات آن‌ها مورد نیاز هستند. برای جلوگیری از این ابهام، زبان‌های برنامه‌نویسی اغلب به عنوان گرامر مستقل از متن (CFG) مشخص می‌شوند. با این حال، اغلب جنبه‌هایی از زبان‌های برنامه‌نویسی وجود دارند که بخشی از زبان هستند و در مشخصات آن مستند شده‌اند ولی یک CFG نمی‌تواند آن‌ها را بیان کند. برای مثال، اگر زبانی اجازه می‌دهد تا انواع جدیدی اعلام شود، یک CFG نمی‌تواند نام این انواع یا روشی که باید در آن استفاده شود را پیش‌بینی کند. حتی اگر یک زبان دارای مجموعه‌ای از انواع از پیش تعریف‌شده باشد، اعمال استفاده مناسب اغلب به زمینه‌ای نیاز دارد. بارگذاری بیش از حد اپراتور مورد دیگری است که در آن استفاده صحیح و عملکرد نهایی به زمینه بستگی دارد. طراحی طراحی یک AST اغلب با طراحی یک کامپایلر و ویژگی های مورد انتظار آن مرتبط است. الزامات اصلی شامل موارد زیر است: انواع متغیرها و همچنین مکان هر اعلان در کد منبع باید حفظ شود. | ## بخش 3: درخت نحو انتزاعی | با این حال، برخی از ساختارهای زبان مانند فهرست‌های آرگومان‌هایی که از پوسته فرمان به برنامه‌ها ارسال می‌شوند، به تعداد دلخواه زیادی از فرزندان نیاز دارند. در نتیجه، یک AST که برای نمایش کد نوشته شده به چنین زبانی استفاده می شود، باید به اندازه کافی انعطاف‌پذیر باشد تا امکان اضافه کردن سریع تعداد ناشناخته‌ای از فرزندان را فراهم کند. برای پشتیبانی از راستی‌آزمایی کامپایلر، باید بتوان یک AST را در فرم کد منبع برگرداند. کد منبع تولید شده باید پس از کامپایل مجدد به اندازه کافی شبیه به نسخه اصلی و از نظر اجرا یکسان باشد. استفاده AST به شدت در طول تجزیه و تحلیل معنایی که در آن کامپایلر استفاده صحیح از عناصر برنامه و زبان را بررسی می‌کند، استفاده می‌شود. کامپایلر همچنین جداول نماد را بر اساس AST در طول تجزیه و تحلیل معنایی تولید می‌کند. AST اغلب برای تولید یک نمایش میانی (IR) که گاهی اوقات زبان میانی نامیده می‌شود، برای تولید کد استفاده می‌شود. ساختار AST سپس به شما اجازه می دهد تا با کد جاوا خود به روش برنامه نویسی آسان کار کنید. | ## جمع‌بندی | فایل های منبع را تجزیه می کند تا یک AST با طراحی خوب با API تجزیه و تحلیل و تبدیل قدرتمند بسازد.