الگول دبلیو
الگول دبلیو (به انگلیسی: ALGOL W) یک زبان برنامهنویسیست. الگول دبلیو بر مبنای یک ارائه برای الگول ایکس توسط نیکلاوس ویرت و سی. ای. آر هوار، به عنوان جانشین الگول ۶۰ در IFIP Working Group 2.1 ایجاد شد. هنگامی که کمیته داوری به این نتیجه رسید که این ارائه پیشرفتی نسبت به الگول ۶۰ ندارن، ارائه با عنوان کمکی به توسعهٔ الگول. به انتشار یافت. بعد از اعمال تغییرات اندکی به این زبان، ویرت پیادهسازی با کیفیتی برای IMB/360 در دانشگاه استنفورد را سرپرستی کرد که به گستردگی انتشار یافت.
پارادایم برنامهنویسی | رویهای، دستوری، ساختیافته |
---|---|
طراحی شده توسط | نیکلاوس ویرت، سی. ای. آر هوار |
ظهوریافته در | ۱۹۶۶ میلادی |
متأثر از | |
الگول ۶۰ | |
تأثیر گذاشته بر | |
پاسکال |
این زبان تغییرات نسبتاً محافظهکارانهای از جمله اضافه کردن رشتهها، بیت رشتهها، اعداد مختلط و ارجاع به نوعدادهی Record، و ارسال پارامترها با روش فراخوانی-با-نتیجه، معرفی کردن دستور while، جایگزینی switch با دستور case، و بهطور کلی محدود کردن این ربان را نشان میداد. پیاده سازی با استفاده از PL/360، زبانی اسمبلی شبه الگول، طراحی شده توسط ویرت، انجام شد. این پیادهسازی شامل قابلیتهای اشکالزدایی و عیبیابی Profiling بود.
صرف و نحو
صرف و نحو الگول دبلیو بر مبنای زیرمجموعهای از مجموعه حروف EBCDIC ساخته شدهاست. در الگول ۶۰ کلمههای از پیشتعریف شده کلمات کم استفاده هستند، اما در الگول دبلیو چیزی بیش از یک سلسله حروف نیستند، و نیازی به Stropping ندارند. کلمات از پیش تعریف شده و شناسهها با فاصله از هم جدا میشوند. از این منظر صرف و نحو الگول دبلیو مشابه پاسکال و زبانهای جدیدتر است.
توضیحات زبان الگول دبلیو با روش Affix Grammer، زبان الگول دبلیو را تعریف میکند که مشابه فرم بکوس-نائور است. این دستور صرف و نحو هستهٔ دستور صرف و نحو ون وینگاردن بود.
بسیاری از صرف و نحو الگول دبلیو با این دستورها تعریف شدهاند.
- شناسهها در حوزه خود به وسیلهٔ تعریفشان مشخص شدهاند. به عنوان مثال procedure identifier شناسهایست که به وسیلهٔ اعلام یک روش تعریف میشود. و label identifier شناسهایست که به عنوان برچسب goto استفاده میشود.
- نوع متغیرها و عبارات با وندها مشخص میشود. به عنوان مثال τ function identifier یک نمونه نحوی برای تابعی است که متغیری از نوع τ بازمیگرداند، اگر یک شناسه به عنوان تابعی که متغیر از نوع صحیح بازمیگرداند در همین حوزه اعلام شده باشد، آن به integer function identifier گسترش میابد.
- خطاهای نوع متغیری، خطاهای دستوری محسوب میشوند. برای مثال، «integer expression / integer expression» و «real expression / real expression» معتبر اما متمایز هستند که عبارات را نمایش میدهند، اما «real expression DIV integer expression» (مثلاً تقسیم یک عدد صحیح بر یک عدد اعشاری از نوع float-point) یک نمونهٔ نحوی نامعتبر است.
مثال
این مثال امکان نوع دادهٔ Record را در الگول دبلیو نشان میدهد:
RECORD PERSON ( STRING(20) NAME; INTEGER AGE; LOGICAL MALE; REFERENCE(PERSON) FATHER, MOTHER, YOUNGESTOFFSPRING, ELDERSIBLING ); REFERENCE(PERSON) PROCEDURE YOUNGESTUNCLE (REFERENCE(PERSON) R); BEGIN REFERENCE(PERSON) P, M; P := YOUNGESTOFFSPRING(FATHER(FATHER(R))); WHILE (P ¬= NULL) AND (¬ MALE(P)) OR (P = FATHER(R)) DO P := ELDERSIBLING(P); M := YOUNGESTOFFSPRING(MOTHER(MOTHER(R))); WHILE (M ¬= NULL) AND (¬ MALE(M)) DO M := ELDERSIBLING(M); IF P = NULL THEN M ELSE IF M = NULL THEN P ELSE IF AGE(P) <AGE(M) THEN P ELSE M END
جستارهای وابسته
- aw2c، کامپایلر الگول دبلیو برای لینوکس
- ALGOL W @ Everything2، توضیحات غیر رسمی، اما مفصل این زبان
- 1969 ALGOL W compiler listing در bitsavers.org
- دفترچههای راهنمای Michigan Terminal System، جلد ۱۶: ALGOL W in MTS