while b ≠ 0: if a > b: a := a - b else: b := b - a return a در علوم کامپیوتر ، درخت نحو انتزاعی ( AST ) ، یا فقط درخت نحو، نمایش درختی از ساختار نحوی انتزاعی متن ( اغلب کد منبع ) نوشته شده به زبان رسمی است. هر گره درخت نشان دهنده یک ساختار در متن است.
"انتزاعی" بودن نحو به این معناست که تمام جزئیات ظاهر شده در نحو واقعی را نشان نمی دهد، بلکه فقط جزئیات ساختاری یا مرتبط با محتوا را نشان می دهد. به عنوان مثال، پرانتزهای گروه بندی به طور ضمنی در ساختار درختی هستند، بنابراین لازم نیست که به عنوان گره های جداگانه نمایش داده شوند. به همین ترتیب، یک ساختار نحوی مانند یک عبارت if - condition - then ممکن است با استفاده از یک گره منفرد با سه شاخه نشان داده شود.
این امر درختان نحو انتزاعی را از درختان نحو انضمامی که به طور سنتی درختان تجزیه نامیده می شوند، متمایز می کند. درختان تجزیه معمولاً توسط یک تجزیه کننده در طول فرایند ترجمه و کامپایل کد منبع ساخته می شوند. پس از ساخته شدن، اطلاعات اضافی با پردازش بعدی، به عنوان مثال، تجزیه و تحلیل زمینه ای به AST اضافه می شود.
درختان نحو انتزاعی نیز در تجزیه و تحلیل برنامه و سیستم های تبدیل برنامه استفاده می شوند.
درخت های نحو انتزاعی، ساختارهای داده ای هستند که به طور گسترده در کامپایلرها برای نمایش ساختار کد برنامه استفاده می شوند. یک AST معمولاً نتیجه فاز تحلیل نحوی یک کامپایلر است و اغلب به عنوان یک نمایش میانی از برنامه از طریق چندین مرحله که کامپایلر به آن نیاز دارد، عمل می کند و تأثیر زیادی بر خروجی نهایی کامپایلر دارد.
یک AST دارای چندین ویژگی است که به مراحل بعدی فرآیند کامپایل کمک می کند:
• یک AST را می توان با اطلاعاتی مانند ویژگی ها و حاشیه نویسی برای هر عنصری که حاوی آن است ویرایش و بهبود بخشید. چنین ویرایش و حاشیه نویسی با کد منبع یک برنامه غیرممکن است، زیرا به معنای تغییر آن است.
• در مقایسه با کد منبع، یک AST شامل علائم نقطه گذاری و جداکننده های غیرضروری ( پرانتز، نقطه ویرگول، پرانتز و غیره ) نمی شود.
• یک AST معمولا به دلیل مراحل متوالی تجزیه و تحلیل توسط کامپایلر، حاوی اطلاعات اضافی در مورد برنامه است. به عنوان مثال، ممکن است موقعیت هر عنصر را در کد منبع ذخیره کند تا به کامپایلر امکان چاپ پیام های خطای مفید را بدهد.
wiki: درخت نحو انتزاعی