زبان برنامه نویسی الگول
الگول ( مخفف عبارت زبان الگوریتمی ) از خانواده زبانهای برنامه نویسی امری کامپیوتری است و در اصل در میانه های سال 1950 توسعه یافته که بسیاری از زبانهای دیگر را تحت تاثیر قرار داده است . عملا راهی شده است که الگوریتم ها در کتاب های درسی و فعالیتهای علمی برای تقریبا30 سال آینده توصیف شوند . الگول برای دوری از برخی مشکلات که در فرترن دیده شده بود طراحی شد و سرانجام باعث پیشرفت بسیاری از زبانهای برنامه نویسی دیگر شد . الگول ها کدها را به صورت بلوکی معرفی کرد و اولین زبانی بود که از دو جفت begin و end برای مرز بندی بلوکها استفاده کرد . قسمتهایی از الگول مانند syntax بعضی اوقات برای ثبت و یادداشت الگوریتم ها استفاده می شود . به همین خاطر به آن Pidgin Algol ( الگول دست و پا شکسته ) می گفتند .
سه خصوصیت اصلی الگول به شرح زیر است :
• الگول 58 با عنوان IAL (زبان الگوریتمی جهانی ) شناخته شد. • الگول 60 در سال 1963 عرضه شد . • الگول 68 درسال 1973 عرضه شد .
نیکلاس ورس Algol –Wرا در الگول 60 قبل از توسعه پاسکال پایه گذاری کرد Algol –W به منظور نسل بعدی Algol در نظر گرفته شد . ولی کمیته الگول 68 تصمیم به طراحی الگولی گرفتند که خیلی جامع ترو پیشرفته تر از الگول ساده شده 60 بود . نسخه رسمی الگول بعد از یک سال از اولین انتشار آن نامگذاری شد . الگول 68 درواقع متفاوت از الگول 60 است اما به خوبی پذیرفته نشد و در نتیجه الگول رایج و عام الگول 60 بود .
اهمیت و اجرا
IAL ( زبان الگول جهانی ) بسیار تاثیرگذار بود و به طور عام مورد توجه زبانهای برنامه نویسی جدید قرار گرفت . شرکت Burroughs خطوط کامپیوترهای آن را ساخت تا مستقیما" آن را به مرحله اجرا برساند . به علاوه در علم کامپیوتر کد موضوعی الگول ؛ یک سری دستورالعمل های معماری ساده و جمع و جوری بود که بیشتر در آموزش ساخت کامپایلر و بقیه زبانهای سطح بالای امری پیاده سازی عملی مانندLisp - machines و P – code machines مورد استفاده قرار گرفته شد . الگول توسط دو کیته علمی کامپیوتر آمریکا و اروپا در جلسه ای در سال 1958 در زوریخ توسعه داده شد .
سه دستورزبان متفاوت مشخص شده برای آن عبارتند از :
1 – نحو مرجع
2 – نحو نشر
3 – نحو اجرا نحوهای مختلف به آن اجازه می داد تا از کلمات کلیدی متفاوتی برای ممیز اعشاری برای زبانهای متفاوت استفاده کند .
الگول بیشتر توسط دانشمندان کامپیوتر در آمریکا و اروپا استفاده می شد . مورد استفاده آن در کار بردهای تجاری بوسیله نبودن استاندارد امکانات ورودی وخروجی در تعریف آن و فقدان بهره و سود و جذابیت در زبان بوسیله فروشنده های بزرگ کامپیوتر به تاخیر انداخته شد . الگول 60 نیز گر چه برای نشر الگوریتم ها استاندارد شد و تأثیر عمیقی بر توسعه زبانهای آینده داشت ولی به این سرنوشت دجار شد. (( جان بکوس )) روش شکل نرمال بکوس برای توصیف زبانهای برنامه نویسی بویژه برای الگول 58 را ایجاد کرد که بوسیله (( پیتر نور )) برای الگول 60 توسعه و عرضه شد و در پیشنهاد دونالد نوس به بکوس نور تغییر نام داد . پیتر نور می گوید : من به عنوان ویرایشگر پژوهشگر الگول در مذاکرات جهانی زبان قرعه کشی شدم و به عنوان عضوی از گروه طراحی زبان اروپا در نوامبر 1959 انتخاب گردیدم . تحت این اعتبار ؛ من ویرایشگر گزارش الگول 60 بودم که این محصول نتیجه جلسه الگول 60 در نوامبر 1960در پاریس می باشد .
افراد زیر در جلسه پاریس ( 1تا 16 ژوین ) حضور داشتند :
فردریش ال بویر – پیتر نور – هنس روتیشاوزر – کلاس سامل سون – برنارد واکیویس – آدرین ون وی جین گاردن و مایکل وجرد ( از اروپا ) جان دبلیو بکوس – جولین گرین – چارلز کاتز – جان مک کارتی – آلن جی پرلیس و ژوزف هنری وی گستین ( از آمریکا ) آلن پرلیس توضیح واضحی از جلسه داده است : جلسه خسته کننده و بسیار طولانی بود . وقتی ایده های خوب شخصی با ایده های بد دیگران کنار گذاشته می شد، باعث خشم و عصبانیت می شد . با وجود این سعی و پافشاری زیادی در طول این دوره می شد . جان بکوس و پیتر نورهر دو به این کمیته در تولید الگول 60 خدمت کردند , همانطور که والی فرزیگ بعدها در بوجود آوردن logo خدمات زیادی انجام داد . الگول 60 الهام بخش و تأثیر گذار در بسیار از زبانهای پیرو آن بود . تونی هویر بیان کرد : این زبانی است که از زمان خودش خیلی جلوتر است و نه تنها پیشرفته زبانهای گذشته است بلکه تأثیری در زبانهای آینده نیز دارد .
مشخصات
الگول 60 چنانچه رسما" تعریف شده بود امکانات ورودی و خروجی نداشت . پیاده سازی ها خودشان را در راه هایی تعریف می کردند که کمتربا یکدیگر همساز بودند. در مقایسه الگول 68 امکانات وسیع کتابخانه ای Transput را پیشنهاد کرده بود .
الگول 60 دو استراژدی ارزیابی برای قبول پارامترها داشت :
1.فراخوانی با ارزش و مقدار 2. فراخوانی با نام
فراخوانی با نام محدودیت های معینی در مقایسه با فراخوانی با مرجع داشت که آن را ویژگی نامطلوبی در طراحی زبان امری ساخته بود . برای مثال،در الگول 60 توسعه یک procedure که ارزش دو پارامتر را تغییر خواهد داد غیر ممکن است اگر پارامترهای واقعی ای که قبول می شوند تا متغیر integer و آرایه ای که با مقدار مشابه integer شاخص شده باشند . هر چند فراخوانی با نام هنوز هم مورد علاقه اجراکننده های الگول برای اجرای آن است . دونالد کنوت یک (( man or boy test )) تعبیه کرده بود تا کامپایلرها را مجزا کند که توابع بازگشتی و مرجع های غیر محلی را درست اجرا کنند . این آزمایش یک مثال از فرا خوانی با نام را دارا بود . الگول 60 بوسیله آدرین ون گاردن که از یک گرامر رسمی دو قسمتی استفاده شده است اختراع شد که در بردارنده نام او بود . Van Wijngaardan grammer از گرامر مستقل از متن استفاده می کرد تا مجموعه ای از دستوالعمل هایی را که برنامه های معمول الگول 68 را پشتیبانی و تصدیق خواهد کرد را تولید کند .
کلمات رزرو شده وشناسه های محدود شده الگول 60
35 کلمه رزرو شده در زیر زبان استانداردBurroughs large systems وجود دارد:
ALPHA, ARRAY, BEGIN, BOOLEAN, COMMENT, CONTINUE, DIRECT, DO, DOUBLE, ELSE, END, EVENT, FALSE, FILE, FOR, FORMAT, GO, IF, INTEGER, LABEL, LIST, LONG, OWN, POINTER, PROCEDURE, REAL, STEP, SWITCH, TASK, THEN, TRUE, UNTIL, VALUE, WHILE, ZIP
71 شناسه محدود شده در زیر زبان استانداردBurroughs large systems وجود دارد:
ACCEPT, AND, ATTACH, BY, CALL, CASE, CAUSE, CLOSE, DEALLOCATE, DEFINE, DETACH, DISABLE, DISPLAY, DIV, DUMP, ENABLE, EQL, EQV, EXCHANGE, EXTERNAL, FILL, FORWARD, GEQ, GTR, IMP, IN, INTERRUPT, IS, LB, LEQ, LIBERATE, LINE, LOCK, LSS, MERGE, MOD, MONITOR, MUX, NEQ, NO, NOT, ON, OPEN, OR, OUT, PICTURE, PROCESS, PROCURE, PROGRAMDUMP, RB, READ, RELEASE, REPLACE, RESET, RESIZE, REWIND, RUN, SCAN, SEEK, SET, SKIP, SORT, SPACE, SWAP, THRU, TIMES, TO, WAIT, WHEN, WITH, WRITE
مثالها
کد PHP:
[PHP]
کد:
Code sample (ALGOL 60)
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
value n, m; array a; integer n, m, i, k; real y;
comment The absolute greatest element of the matrix a, of size n by m is transferred to y, and the subscripts of this element to i and k; begin integer p, q;
y := 0; i := k := 1;
for p:=1 step 1 until n do
for q:=1 step 1 until m do
if abs(a[p, q]) > y then
begin y := abs(a[p, q]);
i := p; k := q
end
end Absmax
[/PHP]
در اینجا مثالی است از اینکه چگونه یک جدول بوجود بیاوریم که ازالیوت803 الگول استفاده می کند.
کد PHP:
[PHP]
کد:
FLOATING POINT ALGOL TEST'
BEGIN REAL A,B,C,D'
READ D'
FOR A:= 0.0 STEP D UNTIL 6.3 DO
BEGIN
PRINT PUNCH(3),££L??'
B := SIN(A)'
C := COS(A)'
PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C'
END'
END
[/PHP]
پانچ3 یک خروجی را به پرینتر تلفنی سریعتر از نوار پانچ می فرستد.
الاین(6و1) فرمت خروجی را با 1 بیت قبل و 6 بیت بعد ممیز اعشاری کنترل می کند