الگول دبلیو

**الگول دبلیو**  یک زبان برنامه‌نویسیست. الگول دبلیو بر مبنای یک ارائه برای الگول ایکس توسط نیکلاوس ویرت و سی. ای. آر هوار، به عنوان جانشین الگول ۶۰ در 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

## منابع

* http://portal.acm.org/citation.cfm?id=365696.365702 کمکی به توسعهٔ الگول
* http://portal.acm.org/citation.cfm?doid=1061073.1061079 نکات افزوده بر "*کمکی به توسعهٔ الگول*"
* http://www-db.stanford.edu/TR/CS-TR-68-89.html اسناد متنوعی برای پیاده سازی‌های الگول دبلیو در سال ۱۹۷۲
* https://web.archive.org/web/20121119115827/http://www.jampan.co.nz/~glyn/algolw.pdf
* این مقاله، ترجمهٔ [//en.wikipedia.org/w/index.php?title=ALGOL_W&oldid=545966542] می‌باشد.

رده:خانواده زبان برنامه‌نویسی الگول
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۶۶ (میلادی)
رده:زبان‌های برنامه‌نویسی ساخت‌یافته
رده:زبان‌های برنامه‌نویسی سیستمی