سقف ویرینگا سطحی است که از کاشی کاری پنروز با بالا بردن رئوس در بعد سوم به منظور همخوانی تمام لوزی ها (در آثار De Bruijn شرح داده شده) تولید می شود.
**پاسکال** یکی از زبان‌های مشهور برنامه‌نویسی سطح بالای متداول است. پاسکال به عنوان زبان ساده‌شده الگول طراحی شد و کاربردهای آموزشی داشت. این زبان را نیکلاوس ویرت، استاد دانشگاه پلی‌تکنیک زوریخ سوییس در سال‌های ۱۹۶۸ و ۱۹۶۹ میلادی طراحی کرد و در سال ۱۹۷۰ به عنوان یک زبان کارآمد و کوچک به منظور پیشبرد و توسعهٔ مهارت‌های برنامه‌نویسی با بهره‌گیری از برنامه‌نویسی ساخت‌یافته و ساختمان داده‌ها، منتشر گردید. نام زبان **پاسکال** از نام بلز پاسکال، ریاضی‌دان فرانسوی بر گرفته شده‌است.
پاسکال یک زبان برنامه‌نویسی امری و ساخت‌یافتهٔ تأثیرگذار است که از ویژگی‌هایش می‌توان به سادگی فراگیری آن اشاره کرد.  

استاندارد این زبان برنامه‌نویسی در سال ۱۹۸۳ نوشته شده و دو سازمان آی تریپل ای و انسی آن را تأیید کرده‌اند. هم‌اکنون این زبان بیش‌تر به‌عنوان زبان برنامه‌نویسی آموزشی برای تازه‌کاران در دانشگاه‌ها آموزش داده می‌شود. سادگی و تجرید خوب این زبان امکان برنامه‌نویسی آسان بدون نیاز به آگاهی از ساختارهای پیچیدهٔ زیرین سیستم‌عامل را می‌دهد.

یک ویرایش برگرفته از پاسکال که با عنوان شی پاسکال شناخته می‌شود، برای برنامه‌نویسی شیءگرا طراحی شد.

تاریخچه
-------

نیکلاوس ورث پیش از پاسکال و برای فراهم‌آوری مقدمات آن، زبان Euler و سپس Algol-W را گسترش داد و سپس زبان‌های Modula-2 و Obern که همانند پاسکال بودند را ساخت. در زمان اختراع پاسکال، زبان‌های برنامه‌نویسی بسیار زیادی وجود داشت ولی تنها شماری از آن‌ها بسیار استفاده می‌شدند که عبارت بودند از **فرترن**, Assembler و **کوبول**. ایدهٔ اصلی زبان جدید نظم، مدیریت داده‌ها و نیاز به تعریف داده‌ها بود. این زبان از آغاز به گونه‌ای طراحی شده بود که زبانی آموزشی باشد.
  
در آغاز پاسکال بسیار وسیع و جامع بود، اما تنها به منظور یاد دادن برنامه‌نویسی ساخت‌یافته به دانشجویان نبود. نسل‌های پیاپی از دانشجویان بر روی پاسکال به عنوان یک زبان آغازین در دوره‌های کارشناسی کار کردند. همچنین نسخه‌های گوناگونی از پاسکال پی‌درپی برای هر کاری از پروژه‌های تحقیقاتی گرفته تا بازی‌های رایانه‌ای و سیستم‌های جاسازی‌شده‌استفاده شد. هم‌اکنون کامپایلرهای تازه‌تر پاسکال موجود هستند که به‌طور گسترده استفاده می‌شوند.  

پاسکال نخستین زبان سطح بالا بود که برای توسعه و تکامل در Apple Lisa استفاده شد و در سال‌های نخستین Mac، بخش‌هایی از سیستم عامل اصلی مکینتاش، از منابع پاسکال توسط دست به زبان اسمبلی 68000 Motorola برگردان شد. حروف‌چینی محبوب سیستم TeX توسط Donald E.Knuth در WEB (سیستم برنامه‌نویسی آموزش دیده اصلی) نوشته شد، که بر پایهٔ DEC PDP-10 Pascal است، آن هم در هنگامی که یک برنامه کاربردی مانند Total Commander در Delphi (پاسکال شی گرا) نوشته شد.

### توربو پاسکال

پاسکال نیز مانند بسیاری از زبان‌های برنامه‌نویسی دیگر دارای کامپایلرهای زیادی است که از معروف‌ترین آن‌ها می‌توان به کامپایلر توربو پاسکال (Turbo Pascal) که متعلق به شرکت بورلند (Borland) است، اشاره کرد. شرکت بورلند از پاسکال شیءگرا به‌عنوان زبان برنامه‌نویسی محیط توسعهٔ نرم‌افزار خود به نام دلفی بهره گرفته‌است.  

توربو پاسکال در سال ۱۹۸۳ معرفی شد و همیشه در بین زبان‌های برنامه‌نویسی از فروش بسیار بالایی برخوردار بود.
توربو پاسکال مفهوم تازه‌ای به نام Integrated Development Environment یا (IDE) به معنای «محیط برنامه‌نویسی مجتمع» را معرفی کرد. در محیط IDE شما می‌توانید کد را ویرایش کنید (در یک ویرایشگر هماهنگ با wordstar)، کامپایلر را آغاز کنید، خطاها را ببینید و به خط‌هایی که حاوی آن خطاهاست بروید، البته این مسئله هم‌اکنون بسیار بی‌معنی به نظر می‌آید، اما در گذشته لازم بود که شما از ویرایشگر بیرون بروید و به DOS برگردید و سپس کامپایلر را به صورت خط فرمانی آغاز کنید، سپس شماره خطاهای خط را یادداشت کنید، دوباره ویرایشگر را باز کنید و به خط‌های حاوی خطا بروید و دوباره همه چیز را از اول انجام دهید.
  

به علاوه بورلند توربو پاسکال خود را فقط ۴۹دلار می‌فروخت، در حالی‌که مایکروسافت کامپایلر پاسکال خود را چند صد دلار به فروش می‌رساند، تداوم موفقیت چند ساله توربو پاسکال سبب شد که درآمدهای مایکروسافت از فروش کامپایلر پاسکال بسیار کاهش یابد.

### پاسکال دلفی

بعد از ۹ نسخه از انتشار توربو پاسکال و بورلند پاسکال، که به تدریج زبان‌های بسیار گسترده‌ای شده بودند، بورلند در سال ۱۹۹۵ دلفی را معرفی نمود که پاسکال را به یک محیط برنامه‌نویسی دیداری (VISUAL) تبدیل می‌کرد.
زبان شیءگرایی پاسکال که ما در دلفی از آن سود می‌جوییم در سال ۱۹۹۵ همراه با محیط برنامه‌نویسی دیداری (VISUAL) دلفی اختراع نشد. این زبان توسعه‌یافتهٔ زبان پاسکال شیءگرا بود که پیشتر در محصول بورلند پاسکال از آن استفاده شده بود، اما بورلند پاسکال آن را را اختراع نکرد بلکه تنها به گسترش و عمومی شدن آن کمک نمود.

چکیده
-----

قصد ورث، خلق یک زبان کار آمد بود (در هر دو مورد سرعت کامپایل و کد ساخته شده) که بر پایه به اصطلاح برنامه‌نویسی ساخت یافته (مفهومی که به تازگی محبوب شده‌است) باشد. اصول و ریشه‌های پاسکال برپایه زبان الگول ۶۰ پی ریزی شد، اما علاوه بر آن مفاهیم و مکانیزم‌هایی را مافوق اعداد و آرایه‌های الگول معرفی کرد که برنامه نویسان را قادر به تعریف انواع داده (ساختمان) پیچیده خودشان می‌کرد و همچنین ساخت ساختمان داده‌های بازگشتی و پویا مانند لیست‌ها، درخت‌ها و گرافها را آسان‌تر می‌نمود.
  

امکانات مهم که برای این امور اضافه شده بود، رکوردها، شمارش‌ها، زیر حوزه‌ها، متغیرهای اختصاص داده شده پویا همراه اشاره گرهای وابسته و مجموعه‌ها می‌باشد. برای تحقق و معنی دار کردن این امر، پاسکال یک سیستم تایپ دهی قوی روی تمام اشیا دارد، به این معنی که یک نوع داده نمی‌تواند بدون تبدیل صریح، به عنوان نوع دیگر تفسیر یا تبدیل شود. امروزه در بسیاری از زبان‌های برنامه‌نویسی مکانیزم‌های مشابهی به صورت استاندارد می‌باشند. زبان‌های دیگر که از توسعه پاسکال تأثیر گرفتند، کوبول، سیمولا ۶۷ و Algol W خود آقای Wirth می‌باشند.
  

پاسکال مانند بسیاری از زبان‌های اسکریپتی امروزه (اما برخلاف زبان‌های خانواده C) به تعریف پروسه‌های تودرتو تا هر عمقی و همچنین اکثر انواع تعریف‌ها و اعلان‌ها درون پروسه‌ها و توابع اجازه می‌دهد. این امر یک نحو خیلی ساده و منسجم را امکان‌پذیر می‌سازد که یک برنامه کامل از نظر نحوی، خیلی نزدیک به یک تابع یا پروسه تنهاست (البته به استثنای خود کلمه کلیدی).

پیاده‌سازی
----------

اولین کامپایلر پاسکال برای سری CDC 6000 خانواده کامپیوترهای پردازنده مرکزی در زوریخ طراحی شد. آقای Wirth گزارش می‌دهد که اولین کوشش برای پیاده‌سازی آن در فرترن در سال ۱۹۶۹ با توجه به نارسایی فرترن برای بیان ساختمان داده‌های پیچیده، ناموفق بود. دومین تلاش‌ها برای خود زبان پاسکال تنظیم و فرموله شد و در اواسط سال ۱۹۷۰ قابل استفاده شد. پس از آن بسیاری از کامپایلرهای پاسکال به‌طور مشابه، خود میزبان بودند، به این معنا که خود کامپایلر در پاسکال نوشته شده‌است و کامپایلر هنگامی که امکانات جدید به زبان اضافه می‌شود یا به محیطی جدید منتقل می‌شود، معمولاً قادر به دوباره کامپایل کردن خود می‌باشد. کامپایلر GNU Pascal یک استثنای قابل توجه در این مورد می‌باشد که در C نوشته شده‌است.
  

اولین انتقال موفق کامپایلر CDC Pascal به یک کامپیوتر پردازنده مرکزی دیگر، توسط Welsh و Quinn در دانشگاه Queen در شهر Balfast در سال ۱۹۷۲ انجام گرفت. کامپیوتر هدف یک ICL 1900 بود.
اولین کامپایلر پاسکال که در آمریکای شمالی نوشته شد، در دانشگاه Illinois زیر نظر Donald B.Gillies برای PDP-11 و کد ماشین تولید شده محلی، ساخته شد. پاسکال در سراسر سال‌های ۱۹۷۰ و ۱۹۸۰ از محبوبیتی بزرگ برخوردار بود.
  

به منظور انتشار سریع زبان، یک کامپایلر (porting kit) در زوریخ ساخته شد که شامل یک کامپایلر بود که برای یک ماشین پشته مجازی کد تولید می‌کرد (یعنی کدی که خودش را به یک تفسیر کارآمد معقول از خودش ارجاع می‌داد) به همراه یک مفسر برای این کد Pascal-P system. اگر چه کد SC (کامپیوتر استک) در ابتدا به قصد کامپایل به کد ماشین صحیح بود، حداقل یک سیستم (سیستم پاده‌سازی جالب توجه UCSD) از آن برای خلق مفسر UCSD P-system استفاده کرد. کامپایلرهای سیستم P، با P1 تا P4 نامیده می‌شوند. P1 به عنوان اولین نسخه و P4 به عنوان آخرین نسخه انتشار یافته از زوریخ.
  

کامپایلر/ مفسرP4 هنوز بر روی سیستم‌های سازگار با پاسکال اصلی قابل اجرا و کامپایل است. با این حال خودش فقط یک زیرمجموعه از زبان پاسکال را قبول می‌کند. یک نسخه از P4 که زبان پاسکال کامل را قبول می‌کند و سازگار با ISO 7185 است، نیز ساخته شد و به نام کامپایلر P5 نامگذاری شد که به صورت منبع در دسترس و مهیاست. یک نسخه جایگزین از آن که به عنوان مدل پیاده‌سازی پاسکال شناخته می‌شود نیز پاسکال کامل را قبول می‌کند و با ISO 7185 سازگار است، اما در کامپیوترهای خواندنی فراهم نمی‌باشد.
  

یک نسخه از کامپایلرهای P4 که اعداد باینری محلی را خلق کرد، برای کامپیوتر پردازنده مرکزی IBM System 370 توسط کمیسیون انرژی اتمی استرالیا ارائه شد. این کامپایلر AAECPascal Compiler نامیده شد پس از حروف اختصاری نام کمیسیون. یک نسخه از P4 از ۶–۱۹۷۵ شامل منابع و اعداد باینری لازم برای کامپایلر و فایل‌های کتابخانه‌ای زمان اجرا، برای پردازنده مرکزی PDP-10 ممکن است از این پیوند قابل دریافت باشد.
  

در اوایل 1980 WatcomPascal نیز برای IBM System 370 توسعه داده شد.
IP Pascal یک پیاده‌سازی از زبان برنامه‌نویسی پاسکال بود که از Micropolis Dos استفاده می‌کرد، اما به سرعت به CP/M که بر روی Z80 اجرا می‌شد، حرکت کرد. بعدها نیز به انواع ماشین‌های ۸۰۳۸۶ در سال ۱۹۹۴ حرکت کرد و امروزه به صورت پیاده‌سازی شده در Linux و Windows/XP وجود دارد. در سال ۲۰۰۸ سیستم به یک سطح جدید ارتقا یافت و زبان حاصله به عنوان Pascaline (بعد از Pascal’s Calculator) نامیده شد. آن زبان، شامل اشیا، کنترل‌های فضای نام، آرایه‌های پویا، به همراه بسیاری الحاقات دیگر، و امکانات عمومی دارای کارکرد مشابه، و حفاظت نوع داده همانند C# می‌باشد. این تنها پیاده‌سازی است که با پیاده‌سازی پاسکال اصلی سازگارمی باشد (که در ISO 7185 استاندارد شده‌است).
  

در اوایل ۱۹۸۰ به منظور مهیا کردن یک جایگزین ساخت یافته برای مفسرهای پایه که با ماشین‌ها آمدند، UCSD Pascal به کامپیوترهای Apple II,Apple III انتقال یافت.
کامپیوتر Apple, Lisa Pascal خودش را برای محیط کار Lisa در سال ۱۹۸۲ خلق کرد و این کامپایلر را به Apple Macintosh و MPW در سال ۱۹۸۵ منتقل کرد. در سال 1985 Larry Tesler در مشاوره با Niklaus Wirth پاسکال شی گرا را تعریف کردو این امکانات در هر دوی Lisa Pascal و Mac Pascal جای داده شدند.
  

در سال‌های ۱۹۸۰، Anders Hejlsberg کامپایلر Blue Label را برای Nascom-2 نوشت. یک پیاده‌سازی مجدد از این کامپایلر برای IBM PC تحت نام‌های Compas Pascal و PolyPascal قبل از اینکه توسط Borland شناسایی شود، در معرض فروش قرار داده شد. نامگذاری مجدد به Turbo Pascal موجب افزایش محبوبیت و قدردانی شد. قدردانی در یک قسمت به خاطر یک راهبرد قیمت‌گذاری جسورانه و پر پشتکار و در یک قسمت به خاطر داشتن یکی از نخستین محیط‌های توسعه یکپارچه تمام صفحه. علاوه بر اینها، Turbo در زبان اسمبلی نوشته شد و تماماً به نحو احسن بهینه شد که سبب شد در رقابت بسیار کوچکتر و سریعتر شود. در سال ۱۹۸۶، Anders، توربو پاسکال را به Macintosh منتقل کرد و الحاقات پاسکال شی گرای Apple را با Turbo درآمیخت. این الحاقات سپس مجدداً به توربو پاسکال نسخه PC شماره ۵٫۵ اضافه شدند.
  

کامپایلر ارزان بورلند یک تأثیر شگرف بر جامعه پاسکال گذاشت که سبب تمرکز ویژه بر روی کامپیوترهای شخصی IBM در اواخر سال‌های ۱۹۸۰ شد. بسیاری از علاقه‌مندان به کامپیوترهای شخصی که در جستجوی یک جایگزین ساخت یافته برای BASIC بودند، شروع به استفاده از این محصول کردند. همچنین این محصول توسط استفاده‌کنندگان حرفه‌ای نیز کم‌کم مورد پذیرش قرار گرفت. درهمین حین، تعدادی مفاهیم از C، به منظور اجازه دادن به برنامه نویسان پاسکال برای استفاده مستقیم از APIهای Microsoft Windows که بر پایه C بودند، وارد پاسکال شدند. این الحاقات مشتمل بر رشته‌های بدون پایان، اشاره گرهای عددی و حسابی، اشاره گرهای توابع، آدرس عملگرها و انواع داده‌ای ناامن می‌باشند.
  

با این حال، بورلند بعداً تصمیم گرفت که امکانات شی گرایی با دقت بیشتر و جزئیات دقیقتر می‌خواهد و آن را با استفاده از پیش نویس‌های استاندارد پاسکال شی گرا که توسط Apple به عنوان اساس و پایه پیشنهاد شده بود، مجدداً در Delphi پیاده کرد (این پیش‌نویس Apple هنوز یک استاندارد رسمی نمی‌باشد). بنابراین اولین نسخه‌های زبان برنامه‌نویسی Delphi، پاسکال شی گرا (Object Pascal) نامیده شدند. الحاقات اصلی در مقایسه با پاسکال شی گرای قدیمی‌تر، مدل شی گرای مبتنی بر مرجع، سازنده‌ها و مخرب‌های مجازی و جزئیات بودند. کامپایلرهای متعدد دیگر نیز این شیوه را اجرا و پیاده‌سازی کردند.
  

توربو پاسکال و دیگر مشتقات به همراه واحدها یا مفاهیم پیمانه‌ای، هم از زبان‌های پیمانه‌ای هستند. با این حال، مفهوم پیمانه تودرتو یا ورود و خروج صحیح نمادهای ویژه را مهیا نمی‌کنند.
Super Pascal یک نوع دیگر بود که برچسب‌های بدون عدد را اضافه کردکه یک دستور یا عبارت بازگشت به عنوان نام‌هایی از نوع‌ها می‌باشد.
  

دانشگاه‌های زوریخ، Karlsruhe و Wuppertal، یک قابلیت را برای محاسبات علمی توسعه دادند (XSC Pascal) که یک راه حل مفید را برای برنامه‌ریزی محاسبات عددی با دقت کنترل شده، مهیا می‌کند.
در سال ۲۰۰۵ در کنفرانس WEB 2.0، Marfic Technology ابزاری معرفی کرد که توسعه کاربردهای WEBکه تماماً در Marfic Pascal نوشته شده بود را مهیا می‌کرد. Marfic Pascal یک گونه از پاسکال شی گرا است که بسیار نزدیک به Delphi می‌باشد.

ساختارهای زبان
--------------

پاسکال در شکل اصلی خودش به‌طور خالص یک زبان رویه‌ای است و دارای آرایش سنتی الگول است که شبیه ساختارهای کنترل به همراه کلمات رزرو شده همچون if,then,else,while,for و … می‌باشد. با این حال پاسکال بسیاری امکانات ساخت یافته داده‌ای و انتزاعی را داراست که در الگول ۶۰ اصلی موجود نبودند. مانند تعاریف نوع‌ها، رکوردها، اشاره گرها، شمارش‌ها و مجموعه‌ها. یک همچنین ساختارهایی تا یک اندازه از Simula 67 ،Algol 68، Algol W خود آقای Wirth و پیشنهادها C.A.R. Hoare الهام گرفته شده یا به ارث برده شدند.

Hello World
-----------

برنامه‌های پاسکال توسط کلمه کلیدی Program به همراه لیستی از فایل‌های خارجی به عنوان پارامترها شروع می‌شوند. سپس بلوک عبارت اصلی که توسط کلمات کلیدی Begin و End بسته‌بندی شده‌است را دنبال می‌کنند. علامت semicolon (;) عبارات را از هم جدا می‌کند و نقطه آخر برنامه تمام برنامه را خاتمه می‌دهد. در پاسکال، بزرگ و کوچکی حروف مطرح نیست. بعضی کامپایلرها مثل توربو پاسکال در میان آن‌ها کلمه کلیدی Program را اختیاری در نظر می‌گیرند.
  

در اینجا یک مثال از کد برای یک برنامه خیلی ساده آورده شده‌است.
  

```
Program HelloWorld(output);
begin
 writeLn('Hello, World!')
end.

```

انواع داده
----------

یک تایپ در پاسکال و در عموم زبان‌های برنامه‌نویسی محبوب دیگر، یک متغیر را به گونه‌ای در نظر می‌گیرد که درآن، حوزه‌ای از مقادیر قابل قبول تعریف می‌شود که متغیر قادر به ذخیره آن می‌باشد و همچنین مجموعه‌ای از عملگرها را لحاظ می‌کند که بر روی آن متغیر با آن نوع مجاز است. انواع داده‌ها و توضیحی مختصر در مورد آن‌ها در زیر آورده شده‌است.
  

نوع داده حوزه قابل ذخیره توسط متغیر
integer تمام اعداد از۳۲۷۶۸- تا ۳۲۷۶۸
byte اعداد صحیح از۰ تا ۲۵۵
real 1E-38 تا 1E+۳۸ اعداد اعشاری از
boolean تنها مقادیر درست و نادرست را نگه می‌دارد.
char هر کاراکتر درمجموعه کد اسکی

ساختارهای داده
--------------

انواع داده‌ای ساده پاسکال عبارتند از real,integer,character,Boolean,enumeration که enumeration یک نوع داده جدید می‌باشد که توسط پاسکال معرفی شد.
  

```
var
 r: Real;
 i: Integer;
 c: Char;
 b: Boolean;
 e: (apple, pear, banana, orange, lemon);

```

زیرحوزه‌های هر نوع داده ترتیبی وصفی (هر نوع ساده به غیر از real) را می‌توان تغییر داد و ساخت.

```
var
 x: 1..10;
 y: 'a'.. 'z';
 z: pear..orange;

```

برخلاف دیگر زبان‌های برنامه‌نویسی زمان خودش، پاسکال نوع داده مجموعه‌ای را پشتیبانی می‌کند.

```
 (set type)
var
 set1: set of 1..10;
 set2: set of 'a'.. 'z';
 set3: set of pear..orange;

```

یک مجموعه، مفهومی اساسی برای ریاضیات مدرن می‌باشد و آن‌ها ممکن است در الگوریتم‌های بزرگ زیادی استفاده شوند. این چنین امکانی بسیار مفید است و ممکن است از ساختن یک معادل در زبانی که مجموعه‌ها را پشتیبانی نمی‌کند بسیار سریع تر باشد، برای مثال برای بسیاری از کامپایلرهای پاسکال

```
if i in [5..10] then
...

```

بسیار سریع تر است از

```
if (i>4) and (i<11) then
...

```

تایپ‌ها می‌توانند از دیگر تایپ‌ها با استفاده از اعلان تایپ تعریف شوند:

```
type
 x = Integer;
 y = x;
...

```

علاوه بر این، نوع‌های پیچیده می‌توانند از نوع‌های ساده ساخته شوند:

```
type
 a = Array [1..10] of Integer;
 b = record
 x: Integer;
 y: Char
 end;
 c = File of a;

```

همان‌طور که در مثال بالا نشان داده شده‌است فایل‌های پاسکال سلسله‌ای از اجزا هستند. هر فایل یک متغیر بافر دارد که با f^ مشخص می‌شود. رویه‌ها (procedure) متغیر بافر را برای خواندن(get) و نوشتن(put) به المان بعدی حرکت می‌دهند. خواندن به این صورت معرفی می‌شود که read(f,x) همانند x:=f^ ; get(f) می‌باشد. نوشتن به این صورت معرفی می‌شود که write(f,x) مانند f^:=x ; put(f) است. نوع داده متن به عنوان فایلی از کاراکترها از پیش تعریف شده‌است. هنگامی که متغیر بافر برای رسیدگی به کاراکتر بعدی می‌تواند مورد استفاده قرار گیرد، از آن استفاده به عمل خواهد آمد (بررسی یک رقم قبل از خواندن یک مقدار صحیح). این مفهوم منجر به اشکالات جدی برای برنامه‌های محاوره‌ای با پیاده‌سازی‌های جدید شد، اما بعدها توسط مفهوم "lazy I/O" حل شد.
  

در پاسکال Jensen و Wirth رشته‌ها به صورت آرایه بسته‌بندی شده‌ای از کاراکترها نمایش داده می‌شوند؛ بنابراین آن‌ها دارای طول ثابت اند و معمولاً دارای فضای خالی می‌باشند. بعضی گونه‌ها یک نوع رشته سفارشی دارند.

اشاره گرها
----------

پاسکال استفاده از اشاره گرها را پشتیبانی می‌کند.

```
type
 a = ^b;
 b = record
 a: Integer;
 b: Char;
 c: a
 end;
var
 pointertob: a;

```

در اینجا متغیر اشاره گر به b، یک اشاره گر به نوع داده b که یک رکورد است، می‌باشد. اشاره گرها قبل از اینکه اعلان شوند، می‌توانند استفاده شوند. این یک اعلان رو به جلو است، یک استثنا برای این قانون که اشیا قبل از استفاده باید تعریف شوند. برای ساخت یک رکورد جدید و اختصاص دادن مقدار ۱۰ و کاراکتر A به قسمت‌های a و b در رکورد و برای مقداردهی اولیه اشاره گرc به تهی، دستورها باید به صورت زیر باشند.

```
new(pointer\_to\_b);
pointertob^.a := 10;
pointertob^.b := 'A';
pointertob^.c := nil;
...

```

این امر می‌تواند با استفاده از عبارت with به صورت زیر نوشته شود.

```
new(pointer\_to\_b);

with pointertob^ do
begin
 a := 10;
 b := 'A';
 c := nil
end;
...

```

توجه داشته باشید که درون حوزه عبارت with کامپایلر می‌داند که a و b به زیر حوزه‌های اشاره گر به رکورد pointertob ارجاع می‌دهد و نه به رکورد b یا نوع داده اشاره گر a.
  

لیست‌های پیوندی، پشته‌ها و صف‌ها با داخل کردن یک نوع اشاره گر(c) به درون رکورد، قابل ساخت می‌باشند. (مفاهیم nil و null را در برنامه‌نویسی کامپیوتری مشاهده کنید)

ساختارهای کنترل
---------------

پاسکال یک زبان برنامه‌نویسی ساخت یافته‌است، به این معنا که جریان کنترل برنامه، به‌طور کامل در میان عبارات استاندارد ساخت یافته‌ای می‌باشد، البته بدون فرمان go to.

```
while a <> b do writeln('Waiting');

if a> b then writeln('Condition met')
else writeln('Condition not met');

for i := 1 to 10 do writeln('Iteration: ', i:1);

repeat
 a := a + 1
until a = 10;

case i of
 0: write('zero');
 1: write('one');
 2: write('two')
end;

```

پردازه‌ها و توابع
-----------------

پاسکال برنامه‌ها را به توابع و پردازه‌ها شکل‌دهی می‌کند.

```
program mine(output);

var i: integer;

procedure print(var j: integer);

 function next(k: integer): integer;
 begin
 next :ه ا= k + 1
 end;

begin
 writeln('The total is: ', j);
 j := next(j)
end;

begin
 i := 1;
 while i <= 10 do print(i)
end.

```

پردازه‌ها و توابع می‌توانند تا هر عمقی به صورت تودرتو باشند و ساختار برنامه به صورت منطقی، بیرونی‌ترین بلوک در نظر گرفته می‌شود. هر پردازه یا تابع می‌تواند اعلان‌های خودش برای برچسب‌های goto، ثوابت، تایپ‌ها، متغیرها و دیگر پردازه‌ها و توابع را داشته باشد که همگی باید در آن دسته قرار گیرند. این ملزومات ترتیبی، در اصل به قصد اجازه به کامپایل یک طرفه کارآمد بود. با این حال در بعضی نسخه‌ها، ملزومات الزامی ترتیبی قسمت اعلان‌ها، مورد نیاز نمی‌باشد.

کامپایلرها و مفسرها
-------------------

کامپایلرها و مفسرهای گوناگون پاسکال برای استفاده عمومی همگان مهیا است:

* Delphi محصول شرکت CodeGear (Borland پیشین) می‌باشد که این شرکت پرچمدار توسعه با شتاب برنامه‌های کاربردی (RAD)(Rapid Application Development) است. از زبان پاسکال شی گرا استفاده می‌کند (نام‌گذاری زبان برنامه‌نویسی Delphi توسط Borland)، زاده شده از پاسکال می‌باشد و به منظور خلق برنامه‌های کاربردی برای بستر windows تهیه شده‌است. نسخه‌های اخیر ۲۰۰۵ تا ۲۰۰۷ کامپایل به بستر .Net را نیز پشتیبانی می‌کنند. یک نسخه از(Turbo Delphi Explorer) برای دریافت رایگان مهیا می‌باشد.
* Free Pascal () یک کامپایلر چند بستره می‌باشد که در پاسکال نوشته شده‌است (خود میزبان می‌باشد). هدف از آن فراهم کردن یک کامپایلر نیرومند و راحت بود که هم قادر به کامپایل برنامه‌های کاربردی قدیمی باشد و نیز ابزاری برای توسعه امکانات جدید. این کامپایلر زیر نظر GNU GPL توزیع شده‌است. با صرف نظر از روش‌های سازگاری برای Turbo Pascal, Delphi و MacPascal، این کامپایلر دارای حالت‌های نحوی شی گرا و ساخت یافته خودش به همراه پشتیبانی امکانات توسعه یافته همانند سربارگذاری عملگرها می‌باشد. او همچنین بسیاری از platformها و سیستم‌عامل‌ها را پشتیبانی می‌کند.
* Lazarus (lazarus.freepascal.org) یک IDE پیوند زده شده با platform بصری شبیه Delphi می‌باشد که برای توسعه با شتاب برنامه‌های کاربردی(RAD) تهیه شده‌است. مبتنی بر freepascal می‌باشد، برای platformهای بسیاری شامل Linux, FreeBSD, Mac OS X و Windows آماده است.
* Dev-Pascal یک محیط برنامه‌نویسی پاسکال است که در Borland Delphi طراحی شد و هر دوی Free Pascal و GNU Pascal را به صورت پیش‌فرض پشتیبانی می‌کند. او برخلاف همزادش C++ سال‌هاست که دستاورد مهمی نداشته‌است.
* Oxygene (قبل تر با نام Chrome شناخته می‌شد) کامپایلر نسل بعد پاسکال شی گرا برای .NET و platformهای تنها می‌باشد. او توسط RemObject Software ساخته و فروخته شد.
* Kylix یکی از اولاد Delphi به همراه پشتیبانی برای سیستم‌عامل لینوکس و نیز یک کتابخانه شی ارتقا یافته بود. کامپایلر و محیط برنامه‌نویسی برای استفاده غیره تجاری هم‌اکنون موجود می‌باشند. این محصول توسط بورلند پشتیبانی نمی‌شود.
* GNU Pascal Compiler (GPC) این کامپایلر پاسکال، مجموعه کامپایلرهای GNU است (GCC) GNU Compiler Collection. خود کامپایلر در C، و کتابخانه زمان اجرا عمدتاً در پاسکال نوشته شده‌است. به صورت مجانی تحت لیسانس نشر عمومی GNU توزیع شده‌است. بر روی بسیاری از platformها و سیستم‌عامل‌ها اجرا می‌شود. او زبان‌های استاندارد ANSI/ISO و بخشی از زبان‌های Borland/Turbo Pascal را پشتیبانی می‌کند. یکی از دردناک‌ترین محذوفات، غیاب %۱۰۰ نوع رشته سازگار با TP است. در این کامپایلر پشتیبانی Delphi و زبان‌های متنوع دیگر به کلی محدود شده‌است به استثنای Mac Pascal که پشتیبانی برای آن به سرعت در حال رشد است.
* Virtual Pascal توسط Vitaly Mirianov در سال ۱۹۹۵ به عنوان کامپایلر درونی OS/2 و سازگار با نحو بورلند پاسکال ساخته شد. پس از آن به صورت تجاری توسط fprint و اضافه کردن پشتیبانی Win32 توسعه یافت و در سال ۲۰۰۰ یک برنامه رایگان شد. امروزه برای Win32 و OS/2 و Linux دارای توانایی کامپایل است و با بورلند پاسکال و دلفی بسیار سازگار است. توسعه این کامپایلر در ۴ آوریل ۲۰۰۵ لغو شد.
* کامپایلر P4 که پایه و اساسی برای بسیاری کامپایلرهای پیاده‌سازی پاسکال در پاسکال می‌باشد، شامل UCSD p-System است. او یک زیر مجموعه از پاسکال کامل را پیاده‌سازی می‌کند.
* کامپایلر P5 یک ISO 7185 (پاسکال کامل) برگرفته از P4 می‌باشد.
* Turbo Pascal یک کامپایلر برتر پاسکال برای کامپیوترهای شخصی در سال‌های ۸۰ و اوایل ۹۰ می‌باشد. به علت توانایی توسعه قوی اش و به ویژه زمان کامپایل کوتاهش، دارای محبوبیت می‌باشد. توربو پاسکال به صورت فشرده نوشته شده‌است و می‌تواند تماماً در حافظه و بدون دسترسی به دیسک، کامپایل، اجرا و اشکال‌زدایی شود. در آن موقع فلاپی دیسک‌های کند در بین برنامه نویسان رواج داشت که این نیز سبب بزرگنمایی مزیت توربوپاسکال شد. هم‌اکنون نسخه‌های قدیمی توربو پاسکال (بالاتر از ۵٫۵) برای دریافت مجانی از سایت بورلند مهیا می‌باشند.
* Turbo51 (turbo51.com) یک کامپایلر مجانی پاسکال برای خانواده ۸۰۵۱ از میکروکنترلرها می‌باشد (از نحو توربو پاسکال ۷٫۵ استفاده می‌کند).
* Dr. Pascal یک مفسر است که پاسکال استاندارد را اجرا می‌کند. نکته قابل توجه، حالت اجرای مرئی آن می‌باشد، که در این حالت، یک برنامه در حال اجرا، و متغیرهای آن برنامه و امکان بررسی خطای زمان اجرا را به صورتی وسیع و گسترده نشان می‌دهد. برنامه را اجرا می‌کند، اما اعداد باینری اجرایی را تولید نمی‌کند. این مفسر، در MS-DOS و Windows (در پنجره DOS) و در Macintoshهای قدیمی اجرا می‌شود.
* کامپایلر پاسکال توسعه داده شده Dr Pascal: این کامپایلر بر روی DOS وWindows 3.1, 95, 98, NT تست شده‌است.
* IP Pascal زبان Pascaline (نامگذاری شده بعد از Pascal’s calculator) را پیاده می‌کند که یک پاسکال توسعه یافته وسیع می‌باشد و براساس ISO 7185 سازگار با پاسکال اصلی تهیه شده‌است. این زبان، پیمانه‌ها را به همراه کنترل‌های فضای نام نشان می‌دهد که مشتمل بر پیمانه‌های وظایف موازی به همراه پرچم‌های راهنما، اشیا، آرایه‌های پویا با هر تعداد بعد که در زمان اجرا تخصیص داده می‌شوند، سربارگذاری‌ها، لغو کردن‌ها و بسیاری امکانات دیگر است. IP Pascal یک کتابخانه قابل نقل و انتقال در درون خود دارد که به صورت سفارشی برای زبان پاسکال ساخته شده‌است. به عنوان مثال یک برنامه کاربردی دارای خروجی استاندارد متنی از پاسکال اصلی سال ۱۹۷۰ را برای کار کردن در یک پنجره و حتی در ساخت‌های گرافیکی اضافه شده، می‌توان مجدداً کامپایل کرد.
* Pocket Stodio یک کامپایلر زیر مجموعه‌ای پاسکال می‌باشد که با هدف قرار دادن سیستم‌عامل Palm به منظور توسعه با شتاب برنامه‌های کاربردی/ MC68xxx طراحی و ساخته شد. برای این امر از بعضی امکانات خودش، برای کمک به واسط‌ها، توسطAPIهای Palm OS استفاده می‌کرد.
* MidletPascal – یک کامپایلر پاسکال و یک IDE که کدهای بیتی سریع و کوچک جاوا را تولید می‌کند و مخصوصاً به منظور ساخت نرم‌افزار برای موبایل طراحی شده‌است.
* Vector Pascal یک زبان است که در مجموعه دستورالعمل SIMD همانند MMX وAMD 3d کنونی، در نظر گرفته شد که تمام پردازنده‌های Intel و AMD را به خوبی موتور Play Station 2 پشتیبانی کند.
* Morfic Pascal که توسعه برنامه‌های کاربردی Web تماماً نوشته شده در پاسکال شی گرا را امکان‌پذیر می‌سازد (برای هردو قسمت کارگزار و مرورگر)
* Web Pascal () یک محیط نرم‌افزاری و کامپایلر پاسکال online می‌باشد.
* WDSibyl یک محیط توسعه بصری و کامپایلر پاسکال برای Win32 و OS/2 است.
* PP Compiler، یک کامپایلر برای سیستم‌عامل‌های Palm است که مستقیماً بر روی کامپیوترهایی به اندازه کف دست اجرا می‌شود.

  

یک لیست بلند بالا را در Pascaland می‌توان پیدا کرد. این Site در فرانسه است، اما اساساً یک لیست به همراه URLهایی به کامپایلرها است، با این حال یک مانع کوچک برای کسانی که فرانسوی زبان نیستند وجود دارد. این پایگاه و پایگاه‌های مرکز پاسکال، سایت مرکزی اطلاعاتی Mac Pascal و سایت advocacy، به همراه مجموعه‌ای غنی از مقالات آرشیوی، به اضافه لینک‌هایی به بسیاری کامپایلرها و خودآموزها، نیز ممکن است جالب باشند.

استانداردها
-----------

در سال ۱۹۸۳، زبان در استاندارد بین‌المللی ISO/ICE 7185 همانند استانداردهای ویژه کشورهای محلی، دارای استاندارد بود و در برگیرنده استاندارد آمریکایی ANSI/IEEE770X3.97-1983 و ISO7185:1993 بود. این دو استاندارد فقط در اینکه استاندارد ISO یک بسط "level 1" برای آرا یه‌های صریح داشت و ANSI اجازه امکان این توسعه را به برنامه اصلی (نسخه آقای Wirth) نمی‌داد، متفاوت بودند. در سال ۱۹۸۹ استاندارد ISO7185 برای تصحیح خطاهای متنوع و ابهاماتی که در سند اصلی موجود بود، بازنگری شد و منجر به ISO 7185:1990 شد.
  

در ۱۹۹۰ یک پاسکال استاندارد توسعه یافته به عنوان ISO/ICE 10206 ساخته شد. در سال ۱۹۹۳ استاندارد ANSI توسط خود سازمان ANSI، با "pointer" به استاندارد ISO 7185:1990 ارتقا یافت. در این استاندارد جدید، اتمام و انتهای وضعیت، به‌طور محسوسی متفاوت می‌باشد.
  

قرار شد که ISO 7185 یک شرح روشن‌کننده و ابهام زدا برای زبان آقای Wirth در سال ۱۹۷۴ باشد، به همان صورتی که توسط دستورالعمل‌های راهنما و گزارش (Jenson & Wirth) شرح داده شده‌است. اما یک نکته قابل تأمل وجود دارد و آن اضافه نمودن پارامترهای آرایه همسان به عنوان level 1 برای این استاندارد و level 0 برای پاسکال بدون آرایه‌های همسان می‌باشد.
  

توجه کنید که خود Nikulas Wirth به زبان ۱۹۷۴ به عنوان استاندارد ارجاع داد، مثلاً برای تفاوت گذاشتن میان آن و امکانات مخصوص ماشین برای کامپایلر CDC6000. این زبان سال ۱۹۷۴ برای پاسکال حرفه‌ای به صورت سند درآمد و قسمت دوم کتابچه راهنمای استفاده‌کنندگان پاسکال و گزارش‌های مربوط به آن می‌باشد.
  

پاسکال بر روی ماشین‌های بزرگ (پردازنده‌های مرکزی و کامپیوترهای کوچک) شروع به کار کرد، و استانداردها عموماً پیروی می‌شدند. اما بر روی کامپیوترهای شخصی IBM این‌گونه نبود. بر روی این کامپیوترها، استانداردهای توربو پاسکال و دلفی بورلند بیشترین تعداد استفاده‌کنندگان را دارا بود.
  

بدین روی، عموماً درک این موضوع مهم می‌باشد که آیا یک پیاده‌سازی ویژه زبان، همانند زبان پاسکال اصلی می‌باشد یا یک نسخه برلند از آن همانند زبان پاسکال اصلی است.
  

با آمدن UCSD Pascal نسخه‌های IBM-PC زبان، از نسخه‌های قبل متفاوت شدند. این نسخه یک پیاده‌سازی شفاهی است که توسعه‌ها و امکانات زیادی، به همراه کاستی‌ها و تغییرات فراوانی را برای زبان بیان کرد. بسیاری از امکانات زبان UCSD در نسخه‌های بورلند، همچنان باقی‌مانده‌اند.

دسته‌بندی‌ها
------------

نسخه Niklaus Wirth’s Zurich زبان پاسکال در دو قالب اساسی به بیرون از ETH انتشار یافت، یکی منبع کامپایلر CDC6000 و دیگری کیت قابل حمل که سیستم Pascal-P نامیده می‌شد. کامپایلر Pascal-P امکانات متنوعی از زبان کامل را محدود کرد و مانع آن‌ها شد. مثلاً پردازه‌ها و توابع که به عنوان پارامتر استفاده می‌شدند، رکوردهای گوناگون همسان، بسته‌بندی، مرتب کردن، gotoهای درون پردازه‌ای و دیگر امکانات کامپایلر کامل کنار گذاشته شدند.
  

UCSD پاسکال زیر نظر Kenneth Bowles بر پایه بسته Pascal-P2 بود، و در نتیجه بسیاری از محدودیت‌های زبان Pascal-P را نیز دارا بود. بعدها پاسکال UCSD به عنوان Apple Pascalنام‌گذاری شد و در نسخه‌های متعددی ادامه پیدا کرد. اگر چه UCSD پاسکال، زیر مجموعه پاسکال را در بسته Pascal-P با برگرداندن استانداردهای پاسکال گسترش داد، اما هنوز به صورت یک مجموعه استاندارد کامل برای پاسکال نبود.
  

توربو پاسکال برلند، توسط Anders Hejsberg در زبان اسمبلی و مستقل از کامپایلرهای UCSD و زوریخ نوشته شد، با این حال او بسیاری از زیر مجموعه‌های مشابه و الحاقات کامپایلر UCSD را پذیرفته بود. احتمالاً این امر به این علت است که سیستم UCSD، عمومی‌ترین سیستم پاسکال بود که برای توسعه کاربردها بر روی سیستم‌های ریزپردازنده‌ای دارای منابع محدود در آن زمان مهیا بود.

لیست استانداردهای مربوط
-----------------------

* ISO 8651-2:1988 سیستم‌های پردازش اطلاعات—گرافیک‌های کامپیوتری— قیدهای زبانی سیستم با هسته گرافیکی (GKS)(Graphical Kernel System) – قسمت ۲: پاسکال

جهت‌گیری‌ها
-----------

پاسکال در جامعه رایانه واکنش‌های متعددی را برانگیخت که هم به صورت موافق بودند و هم به صورت انتقادی.

انتقادات
--------

اگرچه پاسکال بسیار محبوب است (هرچند در سال‌های ۱۹۸۰ و اوایل ۱۹۹۰ خیلی بیشتر از حالا)، نسخه‌های ابتدایی پاسکال به علت نامناسب بودن به خاطر استفاده مشکل در کاربردی غیر از تدریس، به‌طور گسترده مورد انتقاد قرار گرفتند.
  

Brian Kernighan که زبان برنامه‌نویسی C را محبوب کرد، در زودترین زمان ممکن در سال ۱۹۸۱، انتقادات قابل توجه خود را در مقاله خودش با عنوان «چرا پاسکال زبان برنامه‌نویسی محبوب من نیست»، مطرح کرد. از سوی دیگر بسیاری از عمده تلاشهای توسعه در سال‌های ۱۹۸۰، همچون آن‌هایی که برای Apple Lisa و Macintosh بودند، به‌شدت وابسته به پاسکال بودند (اشاره به این نکته که در آن هنگام رابط C برای API سیستم‌عامل Macintosh، مجبور به معامله با انواع داده‌ای پاسکال بود).
  

در دهه‌های پس از آن، پاسکال به رشد و گسترش خود ادامه داد و بیشتر ایرادات Kernighan به پیاده‌سازی‌های فعلی وارد نیستند. متأسفانه همان‌طور که او در مقاله‌اش پیش‌بینی کرده بود، بیشتر الحاقات برای تصحیح این ایرادات، در کامپایلرهای گوناگون ناسازگار بودند. در دهه اخیر، اگر چه عمده تغییرات در دو گروه عمده متمایل به ISO و متمایل به Borland خلاصه می‌شوند، با این حال، وضعیتی بهتر از پیش‌بینی Kernighan حاصل شده‌است.
  

هرچند Kernighan کمبود نوع‌های scape در پاسکال (هیچ scape وجود ندارد از مقاله چرا پاسکال زبان برنامه‌نویسی محبوب من نیست) و استفاده خارج از کنترل اشاره گرها و نوع‌های scape را برملا ساخت، با این حال این‌ها نکات انتقادی شدید و بسیار جدی بودند و زبان‌های java و C# و دیگر زبان‌ها با توجه به این انتقاد وارده بر پاسکال، یک تغییر و برگشت هشیارانه را ترسیم کردند و نشان دادند، که این زبان‌ها، اشاره گرهای مدیریت شده "managed pointers" نامیده شدند که در واقع توسط آقایWirth با خلق پاسکال پیش‌بینی شده بودند.
  

بر پایه این تجربیات پاسکال (و قبلتر با Algol)، آقای Wirth زبان‌های متعدد و بیشتری را توسعه و بسط داد همانند modula, modula 2 و obern. این زبان‌ها که بعضی از ایرادات و اشکالات پاسکال را دارا می‌باشند، به قصد رواج در میان استفاده‌کنندگان گوناگون و به اهدافی دیگر طراحی شده بودند، اما هیچ‌یک نه تأثیری شگرف به وسعت پاسکال بر روی علم کامپیوتر و استفاده‌کنندگان آن گذاشتند و نه تاکنون در موفقیت تجاری مشابهی همانند موفقیت پاسکال دیده شدند.

مزایا و معایب زبان برنامه‌نویسی پاسکال
--------------------------------------

تاکنون ده‌ها زبان برنامه‌نویسی مختلف در جهان به وجود آمده و از بین رفته‌اند که هر یک از آن‌ها دارای مزایا و معایبی بوده‌اند، زبان پاسکال نیز همانند دیگر زبان‌های برنامه‌نویسی دارای مزایا و معایبی است. مزایای زبان پاسکال از معایب آن بیشتر است و این امر باعث دوام چند دهه‌ای آن شده‌است.
  

از مهم‌ترین مزایای پاسکال، قابل فهم بودن دستورها آن می‌باشد، چرا که دستورها پاسکال به زبان محاوره‌ای نزدیک هستند. مزیت دیگر زبان پاسکال، داشتن توابع کتابخانه‌ای است که باعث ایجاد سرعت و سهولت در برنامه‌نویسی می‌گردد. توابع کتابخانه‌ای در حقیقت زیر برنامه‌هایی هستند که از قبل نوشته شده‌اند و شما می‌توانید از آن‌ها در برنامه‌هایتان استفاده کنید. برای مثال اگر بخواهید قدرمطلق عددی را به دست آورید می‌توانید از تابع مربوط که از قبل نوشته شده‌است، استفاده کنید. همچنین از دیگر مزیتهای زبان پاسکال پشتیبانی از انواع اطلاعات می‌باشد و این مزیتی است که باعت برتری زبان پاسکال نسبت به بسیاری از زبان‌های برنامه‌نویسی می‌گردد. زبان پاسکال از اعداد صحیح، اعداد اعشاری، کاراکترها، مجموعه‌ها، آرایه‌ها و. .. پشتیبانی می‌کند. ساخت یافته (structure base) بودن زبان پاسکال نیز از مهم‌ترین مزایای آن است. برنامه ساخت یافته به برنامه‌ای گفته می‌شود که از بلوکهای پی در پی یا متداخل تشکیل شده باشد.  

برنامه‌نویسی ساخت یافته دارای مزایای متفاوتی است:

* + با توجه به اینکه برنامه به قسمت‌های کوچک‌تر تقسیم‌بندی می‌گردد، بنابراین اشکال زدایی (debugging) آن ساده‌تر خواهد بود.
	+ خوانایی و درک برنامه ساده‌تر می‌گردد.
	+ اعمال تغییرات در برنامه ساده‌تر انجام می‌گیرد.

آخرین مزیتی را که می‌توان مورد اشاره قرار داد، داشتن محیط مجتمع برنامه‌نویسی است که به‌طور خلاصه به آن IDE گفته می‌شود. مترجم پاسکال قابلیت ترجمه برنامه‌ها را در دو حالت مجتمع و خط فرمان دارا می‌باشد. در حالت اول می‌توان برنامه را درون ویراستار مخصوص پاسکال نوشته و اجرا کرد. این ویراستار دارای امکانات ویرایشی متعددی می‌باشد که موجب ایجاد سرعت و سهولت در نوشتن برنامه می‌گردد. در حالت دوم می‌توان برنامه را با استفاده از هر ویراستاری تهیه نموده سپس عمل ترجمه را از طریق خط فرمان سیستم‌عامل ویندوز انجام داد.
پس از ذکر مزایای زبان پاسکال بهتر است به معایب آن اشاره داشته باشیم. نداشتن قابلیت انعطاف، نداشتن قابلیت انتقال و عدم امکان تعریف رکورد با طول متغیر، از جمله معایب این زبان هستند.

اجزای تشکیل دهنده یک برنامه
---------------------------

یک برنامه به زبان پاسکال از قسمت‌های مختلفی تشکیل می‌شود. کوچک‌ترین واحدهای معنی دار در زبان پاسکال توکن (Token) نامیده می‌شود که عبارت اند از :  

**۱** - حروف: حروف الفبای بزرگ (از A تا Z) و حروف الفبای کوچک (a تا z)
  

**۲** - ارقام مبنای ۱۰: ارقام ۰ تا ۹
  

**۳** - ارقام مبنای ۱۶: ارقام ۰ تا ۹ و حروف A تا F یا a تا f
  

**۴** - کاراکترهای تکی: +، /، \*، = و. . .
  

**۵** - جفت کاراکترها: مانند <>، =>، =<، = و. . .
  

**۶** - شناسه (Identifier): از شناسه‌ها برای نام‌گذاری استفاده می‌شود. شناسه ترکیبی از حروف، ارقام و کاراکتر زیر خط (-) است که می‌تواند دارای طول دلخواهی باشد اما پاسکال فقط ۶۳ کاراکتر اول را در نظر خواهد گرفت. شناسه حتماً باید با یک حرف یا علام زیر خط (-) آغاز شود.
شناسه‌های به دو دسته تقسیم می‌شوند:

* + الف) شناسه‌های استاندارد: این شناسه‌ها از قبل در پاسکال تعریف شده‌اند برای نمونه می‌توان به Write و Read اشاره نمود.
	+ ب) شناسه‌های غیر استاندارد: این شناسه‌ها به وسیله کاربر به‌طور مجزا تعریف می‌شوند به همین دلیل به آن‌ها User defined گفته می‌شود.

لازم است ذکر شود که پاسکال در تعریف شناسه‌ها تفاوتی میان حروف بزرگ و کوچک قائل نمی‌شود بنابراین شناسه‌های counter و COUNTER با یکدیگر معادل اند.  

**۷** - برچسب (برچسب): از برچسب برای مشخص نمودن خطوط خاصی از برنامه استفاده می‌شود. با استفاده از دستور goto می‌توان کنترل برنامه را به خط مشخصی از برنامه منتقل نمود. برچسب‌ها می‌توانند عدد صحیح در محدوده ۰ تا ۹۹۹۹ یا یک شناسه باشد.  

**۸** - اعداد: اعداد می‌توانند حقیقی یا صحیح، مثبت یا منفی باشند. هرکدام به چند نوع تقسیم می‌شوند. باید توجه داشت که اعداد صحیح می‌توانند از نوع هگزادسیمال نیز باشند که در این صورت باید اولاً با علامت $ شروع شوند و ثانیاً طول آن نباید از هشت رقم هگزادسیمال بیشتر باشد بنابراین محدوده قابل قبول برای اعداد صحیح هگزادسیمال از ۰۰۰۰۰۰۰۰$ تا FFFFFFFF$ است و در ضمن نباید شامل علامت + یا – باشند.  

**۹** - ثابت‌های رشته‌ای (string constants): ثابت رشته‌ای، عبارت از تعدادی کاراکتر است که درون دو علامت آپوستروف (') قرار می‌گیرند. استفاده از کاراکترهای کنترلی (کاراکترهایی که دارای کد اسکی (استاندارد) تا ۳۰ می‌باشند) در یک ثابت رشته‌ای مجاز است اما استفاده از کاراکترهای آپوستروف (') و carriage Return (<cr>) غیرمجاز است. همچنین در صورتی که از علامت # به همراه یک عدد مثبت بین ۰ تا ۲۵۵ استفاده شود باعث جایگزینی کاراکتر متناظر با عدد مربوط در جدول کدهای ASCII خواهد شد.
کلمات رزرو شده (Reserved words): به مجموعه‌ای از کاراکترها گفته می‌شود که برای پاسکال دارای معنای خاصی می‌باشند و هرگز نمی‌توان از آن‌ها به عنوان شناسه غیراستاندارد استفاده نمود.

ساختار کلی برنامه در زبان پاسکال
--------------------------------

اجزای اصلی یک برنامه به زبان پاسکال عبارت اند از:

* عنوان برنامه (program Heading)
* قسمت اطلاعات (Data section)
* قسمت دستورالعمل‌ها (code section)

1. عنوان برنامه شامل دو قسمت زیر است:
	1. نام برنامه (program Name)
	2. فرمان‌های کامپایلر (compiler Directives): این قسمت که به عنوان اولین بخش از ساختمان یک برنامه در نظر گرفته می‌شود محل قرار گرفتن نام برنامه به همراه پارامترهای ورودی و خروجی و همچنین فرمان‌های کامپایلر که کنترل عمل کامپایل شدن برنامه را برعهده دارند می‌باشد. قسمت‌های الف و ب هر دو اختیاری بوده، وجود آن‌ها باعث روشن شدن هر چه بیشتر وظیفه برنامه و شرایط ترجمه آن به زبان ماشین می‌باشد.
2. قسمت اطلاعات (Data section): این قسمت خود شامل ۴ قسمت دیگر می‌باشد که عبارت اند از:
	1. اعلان ثابت‌ها Constant Declaration
	2. اعلان انواع اطلاعات
	3. اعلان متغیرها Variable Declatration
	4. اعلان برچسب‌ها Label Declatration
3. در این قسمت دستورها به ترتیب اجرا مرحله به مرحله گنجانیده می‌شوند. این قطعه، همواره شامل بلوک اصلی برنامه (Main program Block) بوده و می‌تواند در صورت لزوم شامل پروسیجرها و توابع نیز باشند. در بلوک اصلی برنامه که خود با کلمه رزرو شده begin شروع و با end ختم می‌گردد. دستورها عملیاتی مانند نسبت دادن مقادیر معلوم به متغیرها، فراخوانی پروسیجرها و توابع اجرای حلقه‌های مختلف و غیره انجام می‌شود. این قسمت خود شامل سه قسمت دیگر می‌باشد که عبارت اند از:
	1. پروسیجرها (procedures)
	2. توابع (function)
	3. بلوک اصلی برنامه
	4. قسمت متغیرها

نمونه برنامه پاسکال
-------------------

انتقال از مبنای ۲ به ۱۰

uses wincrt;

var

```
 num: array[1..20] of integer;
 i,j,a,c: integer;
 s: longint;
```

begin

```
 writeln('Enter Number in base 2');
 readln(a);
 i:=۱;
 while a>0 do
 begin
 num[i]:=(a mod 10);
 a:=(a div 10);
 inc(i);
 end;
 s:=۰;
 c:=۱;
 for j:= 1 to i do
 begin
 s:=s+(num[j]*c);
 c:=c*۲;
 end;
 writeln;
 writeln('Number In 10 Base Is: ',s);
```

end.

منابع
-----

1. ↑  «Portal:SciTech - Lazarus wiki». *wiki.lazarus.freepascal.org*. دریافت‌شده در ۲۰۲۳-۱۰-۱۵.
2. ↑  «نسخه آرشیو شده». بایگانی‌شده از اصلی در ۲۸ فوریه ۲۰۰۸. دریافت‌شده در ۱۹ ژوئن ۲۰۱۴.
3. ↑  «نسخه آرشیو شده». بایگانی‌شده از اصلی در ۸ ژوئن ۲۰۱۷. دریافت‌شده در ۱ نوامبر ۲۰۱۹.

| * ن
* ب
* و
زبان‌های برنامه‌نویسی |
| --- |
| 
* گاه‌شمار

 |
| 
* زبان اسمبلی
* اسکالا
* ای‌پی‌ال
* بیسیک
* سی
* سی++
* سی شارپ
* هسکل
* کوبول
* فورترن
* جاوا
* جاوااسکریپت
* لیسپ
* پرولوگ
* پاسکال
* پرل
* پی‌اچ‌پی
* پایتون
* روبی
* ویژوال بیسیک دات‌نت
* اسمال‌تاک
* **بیشتر...**

 |
| 
* **رده:زبان‌های برنامه‌نویسی**
* **مقایسه**
* **فهرست‌ها**
	+ فهرست زبان‌های برنامه‌نویسی
	+ زبان‌ها بر پایه نوع
	+ بر پایه نسل
	+ زبان‌های غیر انگلیسی

 |

| * ن
* ب
* و
استانداردهای ایزو |
| --- |
| 
فهرست‌ها
فهرست استانداردهای ایزو
فهرست لاتین‌نویسی ایزو
فهرست استانداردهای آی‌ئی‌سی
رده‌ها
استانداردهای ایزو
استانداردهای ایزو/آی‌ئی‌سی
پروتکل‌های اواس‌آی
 |
| ۱–۹۹۹۹ | 
* ۱
* ۲
* ۳
* ۴
* ۵
* ۶
* ۷
* ۹
* ۱۶
* ۳۱
	+ -۰
	+ -۱
	+ -۲
	+ -۳
	+ -۴
	+ -۵
	+ -۶
	+ -۷
	+ -۸
	+ -۹
	+ -۱۰
	+ -۱۱
	+ -۱۲
	+ -۱۳
* ۱۲۸
* ۲۱۶
* ۲۱۷
* ۲۲۶
* ۲۲۸
* ۲۳۳
* ۲۵۹
* ۲۶۹
* ۳۰۲
* ۳۰۶
* ۴۲۸
* ۵۱۸
* ۵۱۹
* ۶۳۹
	+ -۱
	+ -۲
	+ -۳
	+ -۵
	+ -۶
* ۶۴۶
* ۶۹۰
* ۷۳۲
* ۷۶۴
* ۸۴۳
* ۸۹۸
* ۹۶۵
* ۱۰۰۰
* ۱۰۰۴
* ۱۰۰۷
* ۱۰۷۳–۱
* ۱۴۱۳
* ۱۵۳۸
* ۱۷۴۵
* ۲۰۱۴
* ۲۰۱۵
* ۲۰۲۲
* ۲۱۰۸
* ۲۱۴۵
* ۲۱۴۶
* ۲۲۴۰
* ۲۲۸۱
* ۲۷۰۹
* ۲۷۱۱
* ۲۷۸۸
* ۲۸۵۲
* ۳۰۲۹
* ۳۱۰۳
* ۳۱۶۶
	+ -۱
	+ -۲
	+ -۳
* ۳۲۹۷
* ۳۳۰۷
* ۳۶۰۲
* ۳۸۶۴
* ۳۹۰۱
* ۳۹۷۷
* ۴۰۳۱
* ۴۱۵۷
* ۴۲۱۷
* ۴۹۰۹
* ۵۲۱۸
* ۵۷۷۵
* ۵۷۷۶
* ۵۸۰۰
* ۵۹۶۴
* ۶۱۶۶
* ۶۳۴۴
* ۶۳۴۶
* ۶۳۸۵
* ۶۴۲۵
* کدهای فرار انسی
* ۶۴۳۸
* ۶۵۲۳
* ۶۷۰۹
* ۷۰۰۱
* ۷۰۰۲
* ۷۰۹۸
* ۷۱۸۵
* ۷۲۰۰
* ۷۴۹۸
* ۷۷۳۶
* ۷۸۱۰
* ۷۸۱۱
* ۷۸۱۲
* ۷۸۱۳
* ۷۸۱۶
* ۸۰۰۰
* ۸۱۷۸
* ۸۲۱۷
* ۸۵۷۱
* ۸۵۸۳
* ۸۶۰۱
* ۸۶۳۲
* ۸۶۵۲
* ۸۶۹۱
* ۸۸۰۷
* ۸۸۲۰–۵
* ۸۸۵۹
	+ -۱
	+ -۲
	+ -۳
	+ -۴
	+ -۵
	+ -۶
	+ -۷
	+ -۸
	+ -۸-آی
	+ -۹
	+ -۱۰
	+ -۱۱
	+ -۱۲
	+ -۱۳
	+ -۱۴
	+ -۱۵
	+ -۱۶
* ۸۸۷۹
* ۹۰۰۰/۹۰۰۱
* ۹۰۷۵
* ۹۱۲۶
* ۹۲۹۳
* ۹۲۴۱
* ۹۳۶۲
* ۹۴۰۷
* ۹۵۰۶
* ۹۵۲۹
* ۹۵۶۴
* ۹۵۹۴
* ۹۶۶۰
* ۹۸۹۷
* ۹۹۴۵
* ۹۹۸۴
* ۹۹۸۵
* ۹۹۹۵

 |
| ۱۰۰۰۰–۱۹۹۹۹ | 
* ۱۰۰۰۶
* ۱۰۱۱۶
* ۱۰۱۱۸–۳
* ۱۰۱۶۰
* ۱۰۱۶۱
* ۱۰۱۶۵
* ۱۰۱۷۹
* ۱۰۲۰۶
* ۱۰۲۱۸
* ۱۰۳۰۳
	+ -۱۱
	+ -۲۱
	+ -۲۲
	+ -۲۸
	+ -۲۳۸
* ۱۰۳۸۳
* ۱۰۴۸۷
* ۱۰۵۸۵
* ۱۰۵۸۹
* ۱۰۶۴۶
* ۱۰۶۶۴
* ۱۰۷۴۶
* ۱۰۸۶۱
* ۱۰۹۵۷
* ۱۰۹۶۲
* ۱۰۹۶۷
* ۱۱۰۷۳
* ۱۱۱۷۰
* ۱۱۱۷۹
* ۱۱۴۰۴
* ۱۱۵۴۴
* ۱۱۷۸۳
* ۱۱۷۸۴
* ۱۱۷۸۵
* ۱۱۸۰۱
* ۱۱۸۹۸
* ۱۱۹۴۰ (-۲)
* ۱۱۹۴۱
* ۱۱۹۴۱ (تی‌آر)
* ۱۱۹۹۲
* ۱۲۰۰۶
* ۱۲۱۸۲
* ۱۲۲۰۷
* ۱۲۲۳۴–۲
* ۱۳۲۱۱
	+ -۱
	+ -۲
* ۱۳۲۱۶
* ۱۳۲۵۰
* ۱۳۳۹۹
* ۱۳۴۰۶–۲
* ۱۳۴۰۷
* ۱۳۴۵۰
* ۱۳۴۸۵
* ۱۳۴۹۰
* ۱۳۵۶۷
* نشانه‌گذاری Z
* ۱۳۵۸۴
* ۱۳۶۱۶
* ۱۴۰۰۰
* ۱۴۰۳۱
* ۱۴۳۹۶
* ۱۴۴۴۳
* ۱۴۴۹۶
	+ -۲
	+ -۳
	+ -۶
	+ -۱۰
	+ -۱۱
	+ -۱۲
	+ -۱۴
	+ -۱۷
	+ -۲۰
* ۱۴۶۴۴
	+ -۱
	+ -۲
	+ -۳
	+ -۴
	+ -۵
	+ -۶
	+ -۷
	+ -۸
	+ -۹
* ۱۴۶۴۹
* ۱۴۶۵۱
* ۱۴۶۹۸
	+ -۲
* ۱۴۷۵۰
* ۱۴۸۸۲
* ۱۴۹۷۱
* ۱۵۰۲۲
* ۱۵۱۸۹
* ۱۵۲۸۸
* ۱۵۲۹۱
* ۱۵۲۹۲
* ۱۵۴۰۸
* ۱۵۴۴۴
* ۱۵۴۴۵
* ۱۵۴۳۸
* ۱۵۵۰۴
* ۱۵۵۱۱
* ۱۵۶۸۶
* ۱۵۶۹۳
* ۱۵۷۰۶
	+ -۲
* ۱۵۷۰۷
* ۱۵۸۹۷
* ۱۵۹۱۹
* ۱۵۹۲۴
* ۱۵۹۲۶
* ۱۵۹۲۶ دبلیوآی‌پی
* ۱۵۹۳۰
* ۱۶۰۲۳
* اکما اسکریپت
* ۱۶۷۵۰
* ۱۶۹۴۹ (تی‌اس)
* ۱۷۰۲۴
* ۱۷۰۲۵
* ۱۷۳۶۹
* ۱۷۷۹۹
* ۱۸۰۰۰
* ۱۸۰۰۴
* ۱۸۰۱۴
* ۱۸۲۴۵
* ۱۸۶۲۹
* ۱۸۹۱۶
* ۱۹۰۰۵
* ۱۹۰۱۱
* ۱۹۰۹۲
	+ -۱
	+ -۲
* ۱۹۱۱۴
* ۱۹۱۱۵
* ۱۹۱۲۵
* ۱۹۱۳۶
* ۱۹۴۳۹
* ۱۹۵۰۱:۲۰۰۵
* ۱۹۷۵۲
* ۱۹۷۵۷
* ۱۹۷۷۰
* ۱۹۷۷۵–۱
* ۱۹۷۹۴–۵

 |
| ۲۰۰۰۰+ | 
* ۲۰۰۰۰
* ۲۰۰۲۲
* ۲۰۱۲۱
* ۲۱۰۰۰
* ۲۱۰۴۷
* ۲۱۸۲۷:۲۰۰۲
* ۲۲۰۰۰
* ۲۳۲۷۰
* ۲۳۲۷۱
* ۲۳۳۶۰
* ۲۴۶۱۳
* ۲۴۶۱۷
* ۲۴۷۰۷
* ۲۵۱۷۸
* ۲۵۹۶۴
* ۲۶۰۰۰
* ۲۶۳۰۰
* ۲۶۳۲۴
* مجموعه ایزو/آی‌ای‌سی ۲۷۰۰۰
* ۲۷۰۰۰
* ۲۷۰۰۱
* ۲۷۰۰۲
* ۲۷۰۰۳
* ۲۷۰۰۴
* ۲۷۰۰۵
* ۲۷۰۰۶
* ۲۷۰۰۷
* ۲۷۷۲۹
* ۲۷۷۹۹
* ۲۸۰۰۰
* ۲۹۱۱۰
* ۲۹۱۹۹–۲
* ۲۹۵۰۰
* ۳۱۰۰۰
* ۳۲۰۰۰
* ۳۸۵۰۰
* ۴۰۵۰۰
* ۴۲۰۱۰
* ۴۵۰۰۱
* ۸۰۰۰۰
	+ -۱
	+ -۲
	+ -۳
	+ -۴
	+ -۵
	+ -۶
	+ -۷
	+ -۸
	+ -۹
	+ -۱۰
	+ -۱۱
	+ -۱۲
	+ -۱۳
	+ -۱۴

 |
| 
همچنین ببینید
تمامی مقاله‌هایی که با «ایزو» شروع می‌شوند
رده:ایزو ۶۳۹
رده:ایزو ۳۱۶۶
 |