اینجا هستید : safarionline.ir / books / pumr / ch01

فصل ۱ - Notation: Symbols and Seperators

➡ فهرست مطالب

  1. فصل ۱ - Notation: Symbols and Seperators
  2. symbol seperators
  3. symbol ها
    1. special symbols
    2. word symbols
    3. Identifiers
    4. numbers
    5. chatacter strings
    6. labels
    7. Directives

برنامه‌های پاسکال با symbol ها و symbol seperator ها نوشته می‌شوند. هر بخش را می‌توانیم به موارد ریزتری بشکنیم:

  1. symbols:

    1. special symbols
    2. word symbols
    3. identifiers
    4. numbers
    5. character strings
    6. labels
    7. directives
  2. symbol seperators

    1. blanks (tab + space)
    2. ends-of-line (line seperators)
    3. comments

symbol seperators

blank ها که شامل کاراکتر tab و space اند به علاوه‌ی end-of-line ها که line seperator نامیده می‌شوند و comment ها symbol seperator خوانده می‌شوند.

هیچ بخشی از یک جدا کننده یا seperator نباید در داخل یک symbol پاسکال بیاید. بین دو identifer و یا word-symbol و یا عدد باید حداقل یک جداکننده بیاید.

کامنت‌ها با { و یا (* شروع و با } و یا *) تمام می‌شوند. کامنت می‌تواند شامل هر توالی از کاراکترها (بجز } و یا *)) و end-of-line های متعدد باشد.

A comment may be replaced with a space in the program text without altering its meanning.

💡 اغلب اوقات می‌توانید خوانایی برنامه‌ی خود را با درج blanks و end-of-line (خط خالی) و نوشتن کامنت افزایش دهید.

مثال از symbol seperator ها در متن برنامه

symbol ها

همان گونه که در لیست ابتدای فصل دیدیم symbol ها به چند دسته تقسیم می‌شوند:

special symbols

symbol های ویژه از قرار زیرند. توجه کنید که symbol های ویژه‌ی دو کاراکتری باید پشت سر هم نوشته شوند و بین آن‌ها نباید seperator بیاید:

+   -   *   /
.   ,   :   ;
=   <>  <   <=  >   >=
:=  ..  ↑
(   )   [   ]

چند تا از symbol های ویژه‌ی بالا دارای معادل هستند:

(.      for [
.)      for ]
@ or ^  for ↑

⛔ symbol های (. و .) مربوط به نسخه‌های اولیه‌ی پاسکال بودند. در دهه‌ی ۱۹۷۰ بسیاری از ترمینال‌ها و چاپگرها کاراکترهای [ و ] را نداشتند.
به کاراکتر upward-arrow می‌گویند. امروزه بجای آن از کاراکتر ^ استفاده می‌کنند.
  ⬅ مثال از symbol های ویژه‌ی (. و .)

word symbols

word symbol ها یا کلمات رزرو شده معمولا در برنامه‌های دست‌نویس با خط زیر یا underline نوشته می‌شوند تا تاکیدی باشد بر اینکه این‌ها symbol های تکی با یک معنای ثابت هستند. این کلمات را در هیج جایی غیر از جاهایی که تعریف رسمی پاسکال آن را صراحتا ذکر کرده است نمی‌توانید استفاده کنید. به طور ویژه این کلمات را نباید به عنوان identifier به کار ببرید.

کلمات رزرو شده یا word symbol ها به صورت توالی از حروف بزرگ یا کوچک و بدون هیج گونه کاراکتر escape که آن‌ها را محصور کرده باشد نوشته می‌شود. #Think

لیست کلمات رزرو شده از قرار زیر است:

and         end         nil         set
array       file        not         then
begin       for         of          to
case        function    or          type
const       goto        packed      until
div         if          procedure   var
do          in          program     while
downto      label       record      with
else        mod         repeat

🔔 در این نسخه‌ی پاسکال که توسط طراح زبان پاسکال در کتاب توضیح داده شده است تعداد کلمات رزرو شده یا به عبارت دیگر word symbol ها ۳۵ عدد هستند. در پیاده‌سازی‌های دیگر پاسکال از قبیل Turbo Pascal و یا Free Pascal این تعداد فرق می‌کند. دقت کنید که کلمه‌ی foward جزو کلمات کلیدی ذکر نشده است.

Identifiers

Identifier نامی است که دلالت بر constant ها، type ها، محدوده ها یا bound ها، متغیرها و پروسیجرها و توابع می‌کند. identifer ها باید با یک حرف آغاز شوند که در ادامه هر تعدادی از حروف و ارقام به هر ترتیبی می‌تواند بیاید. حروف بزرگ و کوچک در identifier فرقی با هم ندارند و معادل هم هستند.

چند مثال درست و غلط از identifier را کادر زیر می‌بینید:

PhoneList   Root3   Pi  h4g    X                        ✅ valid identifiers
ThisIsAVeryLongButNeverTheLessValidIndentifier          ✅ valid identifiers
ThisIsAVeryLongButDifferentIdentifierThanTheOneAbove    ✅ valid identifiers
LettersAndDigits    letersanddigits                     ✅ same identifier

3rd     array       level.4     Root-3      Tenth Plant ❌ invalid

identider های مشخصی تحت عنوان predeclared identifier به صورت خودکار فراهم شده و در اختیار برنامه‌نویس برای استفاده قرار دارد. از این دسته می‌توان از sin و cos نام برد. برعکسِ word symbol ها یا همان کلمات کلیدی مثل array، اینجا می‌توانیم این identifier های از پیش تعریف شده را دوباره تعریف کنیم. در مورد این predeclared identifier ها فرض کنید که یک بلاک فرضی کل بلاک program را احاطه کرده است، به همین خاطر و بر مبنای قوانین scope این identifier ها در دسترس کل برنامه قرار دارند و از طرفی بعد از بازتعریف identifier ای به همین نام در یک بلاک داخلی، identifier بلاک خارجی از دسترس خارج می‌شود.

numbers

برای نمایش اعداد از شیوه‌ی ده‌دهی یا دسیمال استفاده می‌کنیم خواه Integer باشند یا Real. هر عدد می‌تواند یک علامت + یا - را به عنوان پیشوند بپذیرد. کاراکتر کاما , نباید در عدد بیاید. اگر عددی علامت + و یا - داشته باشد دیگر عدد بدون علامت یا unsigned نیست.

Real numbers are written with a decimal or scale factor or both. The letter E (or e) preceding the scale factor is prononuced as "times 10 to the power."

توجه کنید که اگر یک عدد Real نقطه اعشار داشته باشد در این صورت حتما باید حداقل یک عدد قبل از نقطه اعشار و یک عدد بعد از نقطه اعشار وجود داشته باشد.

❗ در Free Pascal قبل از نقطه اعشار باید حتما یک عدد باشد ولی بعد از نقطه اعشار می‌تواند چیزی نیاید. یعنی .1 غلط است ولی 1. درست است.
  ⬅ مثال برای تست این موضوع

در کادر زیر تعدادی عدد unsigned صحیح و نیز تعدادی عدد که به شیوه‌ی نادرست نوشته شده‌اند را می‌بینید:

3       03      6272844     0.6     5E-8    49.22E+08       1E10    ✅

3,487,159       XII         .6      E10     5.E-16          five    ❌
3.487.159       3.          ❌                                               

chatacter strings

یک توالی از کاراکترها که با single quote ' محصور شده باشد string نامیده می‌شود. برای اینکه خود ' را در string استفاده کنید ' را دوبار بنویسید.   ⬅ مثال

labels

Label ها unsigned integer هستند و برای علامت‌گذاری یک statement پاسکال استفاده می‌شوند. ارزش ظاهری label باید در محدوده‌ی ۰ تا ۹۹۹۹ باشد. منظور از ارزش ظاهری این است که عدد 00100 گرچه با 00 شروع می‌شود ولی عددی از نوع unsigned integer و درست است و مقدار آن 100 است و لذا 00100 را به درستی می‌توانیم برای یک label به کار ببریم. ⬅ مثال

❗ در Free Pascal لیبل‌ها همچنان باید unsigned باشند ولی دیگر مانند پاسکال ویرث محدود به عدد ۹۹۹۹ نیستند. مثال فوق را ببینید.

Directives

Directive ها نام‌هایی هستند که جایگزین بلاکِ پروسیجر و تابع می‌شوند. syntax diagram دایرکتیوها مانند identifier هاست. فصل ۱۱ را ببینید.

💡 در پاسکالِ ویرث عملا فقط یک directive به نام forward وجود دارد که می‌گوید تعریف این پروسیجر یا تابع بعدا خواهد آمد. forward کلمه‌ی رزرو شده نیست.

© کلیه‌ی حقوق برای safarionline.ir محفوظ است.