وابستگی عملگر
در زبان های برنامهنویسی وابسته بودن یک عملگر یک ویژگی است که چگونگی اولویت عملگرها را در غیاب پرانتز مشخص میکند. به طور کلی در اکثر زبان های برنامه نویسی عملگرها با ترتیب خاصی اعمال میشوند، که این قوانین تحت عنوان اولویت عملگرها و وابستگی عملگرها شناخته میشوند. اگر دو عملگر با سطح اولویت یکسان هم قبل و هم بعد از یک عملوند بیایند، قانون وابستگی عملگر به کامپایلر میگوید که آن عملگرها را از سمت راست به چپ و یا چپ به راست به ترتیب اولویت بدهد. به عنوان مثال، در عبارت ^3^
است. عملگرها به چهار دستهٔ وابسته (یعنی عملیات میتواند به صورت دلخواه گروه بندی شوند)، وابستهٔ چپ (به معنای این که عملیاتها از سمت چپ گروه بندی می شوند) و وابستهٔ راست (به معنای این که عملیاتها از سمت راست گروه بندی شده اند) یا غیر وابسته (به معنای این است که عملیات به دلیل ناسازگاری با نوع ورودی نمیتواند گروه بندی شود) تقسیم میشند. تعریف نوع وابستگی عملگرها و اولویت آن ها در تعریف زبان برنامه نویسی مشخص میشود. در زبانهای برنامهنویسی مختلف ممکن است نوع وابستگی و اولویت برای یک عملگر متفاوت باشد.
برای فهم تفاوت این چهار دسته عبارت
جدول وابستگی در زبان های برنامه نویسی
جدول وابستگی نشان دهنده ی نوع وابستگی هر عملگر موجود در آن زبان برنامهنویسی است. جدول زیر یک جدول اولویت در زبان جاوا است که نشاندهندهٔ نوع وابستگی هر عملگر موجود در این زبان است.
در این جدول هر گروه از عملگرهای جدول تقدم یکسان دارند. هر چه تقدم بالاتر باشد، اولویت گروه بندی بالاتر است.
وابستگی | عملگر | الویت |
---|---|---|
غیر وابسته | ()
| 1 |
غیر وابسته | new | 2 |
وابستگی چپ | . | 3 |
غیر وابسته | ++
| 4 |
وابستگی راست | !
(unary)+ (unary)- (type) | 5 |
وابستگی چپ | * | 6 |
وابستگی چپ | +
| 7 |
وابستگی چپ | <<
| 8 |
غیر وابسته | instance of | 9 |
وابستگی چپ |
| 10 |
وابستگی چپ | & | 11 |
وابستگی چپ | ^ | 12 |
وابستگی چپ | | | 13 |
وابستگی چپ | && | 14 |
وابستگی چپ | || | 15 |
وابستگی راست | :? | 16 |
وابستگی راست | =
| 17 |
مثال
همانطور که ذکر شد، وابستگی عملگرها وقتی مطرح میشود که عملگرها دارای اولویت یکسانی باشند. به طور مثال عملگرهای ضرب و تقسیم اولویت یکسانی دارند. عبارت
در عبارات ریاضی و برای استفادههای معمولی، عملیاتهای جمع، تفریق، ضرب و تقسیم با وابستگی چپ در نظر گرفته میشوند. عملیات مقداردهی نیز معمولاً با وابستگی راست نمایش داده میشود. اما عملیاتهای توانرسانی قاعده کلی ندارند و ممکن است با وابستگی چپ یا راست نمایش داده شوند. در قاعدهی کلی، عملگرهایی که اولویت یکسانی دارند باید وابستگی یکسانی داشته باشند.
برای درک بهتر عبارت 2^3^2
را با وابستگی راست در نظر بگیرید. یک تجزیهکننده که عبارت را از چپ به راست میخواند، با توجه به وابستگی راست عملگر ^
به صورت زیر عمل میکند:
- ترم 2 خوانده میشود.
- ناپایانه
^
خوانده میشود. در درخت راس^2
ذخیره میشود. - ترم 3 خوانده میشود. و در درخت راس
3^2
نگه داشته میشود. - ناپایانه
^
خوانده میشود. با توجه به وابستگی راست عملگر^
، راس3)^2
در درخت ذخیره میگردد. - ترم 2 خوانده میشود. راس
2^3)^2
در درخت ذخیره میگردد. - نشانه دیگری وجود ندارد و بنا بر وابستگی راست، راس
(2^3)^2
در درخت درج میشود.
با استفاده از الگوریتم جستجوی اول عمق، گامهای زیر بر روی درخت اجرا میشود:
- در درخت از اولین
^
شروع میکنیم تا به آخرین (در اینجا دومین) عملگر^
برسیم. - مقدار
9=2^3
محاسبه شده و به عنوان عملوند دوم در عملگر^
اول استفاده میشود. - یک سطح در درخت بالا میرویم و به ریشه درخت میرسیم. در نتیجه حاصل برابر با
512=9^2
خروجی داده میشود.
اگر برای عملگر توانی وابستگی چپ در نظر گرفته شود، عبارت 64=2^(3^2)
به دست خواهد آمد.
وابستگی راست در عملگر مقداردهی
عملگر مقداردهی (=) در اکثر زبانهای برنامهنویسی دستوری با وابستگی راست تعریف شدهاست. همچنین مقداردهی به صورت یک اصطلاح تعریف میشود. تفاوت اصطلاح با عبارت این است که اگر در انتهای یک اصطلاح ;
اضافه کنیم، به عبارت تبدیل میشود. در نتیجه امکان مقداردهی زنجیرهای به وجود میآید و مقدار یک مقداردهی به عنوان ورودی به یک مقداردهی دیگر داده میشود.
به طور مثال در زبان C ، با اجرای مقداردهی
جستارهای وابسته
منابع
- ↑ "آموزش زبان ++C : اولویت عملگرها (Operator precedence) و وابستگی (associativity)". خوش آموز (به انگلیسی). Retrieved 2020-01-31.
- ↑ «SIP Reference Manual» (PDF).
- ↑ «[Chapter 4] 4.14 Order of Operations». web.deu.edu.tr. دریافتشده در ۲۰۲۰-۰۲-۰۱.
- ↑ «Exponentiation Associativity and Standard Math Notation - Code Plea». codeplea.com. دریافتشده در ۲۰۲۰-۰۲-۰۱.
- ↑ «Operator Precedence and Associativity in C». GeeksforGeeks (به انگلیسی). ۲۰۱۴-۰۲-۰۷. دریافتشده در ۲۰۲۰-۰۲-۰۱.