اسنوبول کیست؟ توضیح بده.
اسنوبول (یک زبان سمبلیک و کاراکترگرا) در واقع تلفیقی از مجموعه زبانهای برنامه‌نویسی که بین سال‌های ۱۹۶۲ تا ۱۹۶۷ درآزماشگاه بل توسط افرادی نظیردیوید فاربر، رالف گریسولد و ایوان پلونسکی توسعه پیدا کرده‌اند می‌باشد که این کار در زبان اسنوبول۴ به اوج خودش رسیدSNOBOL۴ کاملاً به‌طور گسترده‌ای در دانشگاه‌های بزرگ آمریکا در اواخر ۱۹۶۰s و ۱۹۷۰s زود آموزش داده شد و به‌طور گسترده‌ای در ۱۹۷۰s و ۱۹۸۰s به عنوان یک زبان دستکاری متن در علوم انسانی مورد استفاده قرار گرفت.در سال‌های اخیر استفاده از آن به عنوان زبان جدیدتری مانند AWK و پرل پژمرده دستکاری رشته با استفاده از عبارات منظم مد روز ساخته شده‌اند. الگوهای SNOBOL۴ خانواده را شامل گرامرهای BNF، که معادل دستور زبان مستقل از متن و قوی تر از عبارات منظم است " عبارات منظم " در نسخه‌های فعلی از AWK و پرل در واقع پسوند عبارات منظم در معنای سنتی است، اما به‌طور منظم. عبارات، بر خلاف الگوهای SNOBOL۴، نمی‌تواند است بازگشتی، می‌دهد که یک مزیت محاسباتی مجزا به الگوهای SNOBOL4. با این حال، از پرل ۵٫۱۰ (در دسامبر ۲۰۰۷ منتشر شد)، پرل از عبارات منظم می‌تواند بازگشتی.یکی از طراحان SNOBOL، رالف Griswold، جانشینان طراحی شده برای SNOBOL۴ به نام SL۵ و icon، که ترکیب backtracking الگوی SNOBOL۴ تطبیق با استاندارد الگول است که شبیه ساختار ALGOL، و همچنین اضافه کردن برخی از ویژگی‌های خود را دارندتوسعه زبان.زبان SNOBOL اولیه به عنوان یک ابزار توسط نویسنده آن مورد استفاده قرار گرفت و برای استفادهٔ نمادین چندجمله‌ای ایجاد شده‌است. این کاربرد در زبان اسمبلی برای IBM ۷۰۹۰ استفاده شده‌است. این یک گرامر ساده، فقط یک نوع داده، رشته، بدون توابع، و هیچ اعلامیه‌ها و کنترل خطا بسیار کم است. با این حال با وجود سادگی آن و طبیعت «شخصی» آن استفادهٔ این زبان را زیاد کرده‌است، و باعث شروع به گسترش به گروه‌های دیگرشد. به عنوان مثال یکی از نویسندگان تصمیم گرفت تا آن را گسترش دهد و به صورت مرتب آن را به گسترش بدهد. و آن را بازنویسی کرد وچندین توابع به آن افزود، از هر دو استاندارد و تعریف شده توسط کاربر، و در نتیجه به عنوان SNOBOL۳ منتشر شد. در SNOBOL۲ قابلیت تعریف توابع توسط کاربر وجود نداست به همین دلیل محبوب نشد؛ و به دلیل اینکه در SNOBOL۳ قابلیت تعریف توابع وجود داشت به سرعت بین برنامه نویسان محبوب شد و برای دیگر کامپیوترها از IBM ۷۰۹۰ توسط دیگر برنامه نویسان بازنویسی شد. در نتیجه چند گویش ناسازگار به وجود آمد.مترجم زبان SNOBOL۴ در زبان اسمبلی نوشته شده‌است. با این حال ویژگی‌های ماکرودر اسمبلر استفاده شد تا دستورالعملهای ماشین مجازی که مربوط به پیاده‌سازی زبان SNOBOL می‌بود استفاده شود؛ که این ویژگی قابل حمل بودن در زبان را ارتقاء داد.ویژگی‌های زبان.SNOBOL۴: از تعدادی از انواع داده‌ها، مانند اعداد صحیح و اعداد دقت محدود واقعی، رشته‌ها، الگوها، آرایه‌ها، و جدول (آرایه‌های انجمنی)، و همچنین به برنامه‌نویس اجازه تعریف انواع داده‌های اضافی و توابع جدید را می‌دهد.همه خطوط دستور SNOBOL فرم Label۱ موضوع الگوی = شیء: (رفتن به Label2) هر یک از این پنج بخش اختیاری است. اگر جسم حاضر است، هر بخشی همسان از طریق قوانین برای جایگزینی جایگزین شده‌است. goto می‌تواند یک پرش مطلق یا مشروط در موفقیت یا شکست در ارزیابی یک موضوع، ارزیابی الگوی، بازی الگو، ارزیابی شیو یا انتساب نهایی باشد.الگوی SNOBOL می‌تواند بسیار ساده یا بسیار پیچیده باشد. یک الگوی ساده تنها یک رشته متن (مثلاً " ABCD ") است، اما الگوی پیچیده ممکن است یک ساختار بزرگ توصیف، به عنوان مثال، دستور زبان کامل از زبان کامپیوتر باشد. ممکن است یک مترجم زبان در SNOBOL تقریباً به‌طور مستقیم از یک عبارت به صورت Backus - Naur با چند تغییرپیاده‌سازی می‌شود. ایجاد یک اسمبلر ماکرو و یک مترجم برای یک قطعه به‌طور کاملاً نظری از سخت‌افزار که چند صد خط است، می‌تواند با یک دستور جدید که با یک خط نوشته شده اضافه گردد.SNOBOL متغیرها، رشته‌ها و ساختارهای داده‌رادر یک HEAP ذخیره می‌کند.SNOBOL رقبای APL برای تمایز خود را در قالب و سبک‌های برنامه‌نویسی، در هر دو، اساساً برخلاف چند زبان رویه‌ای «استاندارد» مانند BASIC، فرترن، یا C.برای خاتمه دادن در این زبان از دستور CTRL+Z یا END استفاده می‌کنیم.مثال (برنامه نمونه). OUTPUT = "Hello world" ENDمثال دوم: OUTPUT = "What is your name?" Username = INPUT OUTPUT = "Thank you, " Username ENDمثال سوم OUTPUT = "What is your name?" Username = INPUT Username "J" :S(LOVE) Username "K" :S(HATE) MEH OUTPUT = "Hi, " Username :(END) LOVE OUTPUT = "How nice to meet you, " Username :(END) HATE OUTPUT = "Oh. It's you, " Username ENDمثال چهارم OUTPUT = "This program will ask you for personal names" OUTPUT = "until you press return without giving it one" NameCount = 0 :(GETINPUT)" AGAIN NameCount = NameCount + 1 OUTPUT = "Name " NameCount ": " PersonalName GETINPUT OUTPUT = "Please give me name " NameCount + 1 PersonalName = INPUT PersonalName LEN(1) :S(AGAIN) OUTPUT = "Finished. " NameCount " names requested." END