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

فصل ۱ - Notation: Symbols and Seperators

برنامه‌های پاسکال با 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

هیچ بخشی از یک جدا کننده یا 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 ها به چند بخش تقسیم می‌شوند:

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

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

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

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

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

  2. 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 جزو کلمات کلیدی ذکر نشده است.

  3. 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 بلاک خارجی از دسترس خارج می‌شود.

  4. برای نمایش اعداد از شیوه‌ی ده‌دهی یا دسیمال استفاده می‌کنیم خواه 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.          ❌                                               
    
  5. یک توالی از کاراکترها که با single quote ' محصور شده باشد string نامیده می‌شود. برای اینکه خود ' را در string استفاده کنید ' را دوبار بنویسید.   ⬅ مثال

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

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

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

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

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