Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
со Глей.doc
Скачиваний:
16
Добавлен:
07.02.2016
Размер:
490.5 Кб
Скачать

Синтаксис і мовні конструкції

Паскаль, в його первісному вигляді, представляє собою чисто процедурний мову і включає в себе безліч алголоподобних структур і конструкцій з зарезервованими словами на зразок if, then, else, while, for, і т. д. Проте, Паскаль також містить велику кількість можливостей для структурування інформації та абстракцій, які відсутні в початковому Алгол-60, такі як визначення типів, записи, покажчики, перерахування, і безлічі. Ці конструкції були частково успадковані або інспіровані від мов Симула -67, Алгол-68, створеного Никлаусом Віртом AlgolW та запропоновано Хоаром.

У сучасних діалектах (Free Pascal) доступні такі операції як перевантаження операторів і функцій.

Hello world

Програми на Паскалі починаються з ключового слова program і наступного за ним ім'я програм з крапкою з комою (в деяких діалектах є необов'язковим), за ім'ям може в дужках слідувати список зовнішніх файлових дескрипторів в якості параметрів, за ним слід тіло програми, що складається із секцій опису змінних, типів і констант , оголошень процедур і функцій і наступного за ними блоку операторів, що є точкою входу в програму. У мові Паскаль блок обмежується ключовими словами begin і end. Оператори поділяються крапкою з комою, після тіла поміщається точка, що служить ознакою кінця програми. Літери в Паскалі не має значення.

Таким чином, найпростіша програма на Паскалі буде виглядати наступним чином:

program p; begin end .

Програма не виконує ніяких дій і містить порожній блок операторів.

Приклад програми, що виводить рядок "Hello, World!":

program HelloWorld ( output ) ; begin writeln ( 'Hello, World!' ) {Оператор виведення рядка} end .

В Pascal над цілими типами (byte, shortint, word, integer, longint і їх діапазони) припустимі побітові операції. Логічні операції над бітами: Над битами двох цілих операндів можна виконувати раніше розглянуті логічні операції: not, and, or, xor. Відмінність між побітовим і логічними операціями полягає в тому, що побітові (порозрядне) операції виконуються над окремими бітами операндів, а не над їх значенням в десятковому (звичайно) поданні.

Виділяється поняття порядкових типів даних (ordinal), до них відносяться цілі типи (знакові і беззнакові), логічний ( boolean), символьний ( char), Перечіслімий типи і типи-діапазони.

Порядкові типи задаються цілим числом (кодом), яку можна отримати за допомогою функції ord. Всі операції, що виконуються над порядковими типами, виконуються з їх кодами.

Діапазони містять підмножина значень інших порядкових типів:

var x : 1 .. 10 ; Y : 'A' .. 'Z' ; Z : pear .. orange ;

Для порядкових типів визначені операції inc, dec, succ, pred, ord, операції порівняння ( = > < => <= <>), їх можна використовувати в операторах case, for (як лічильник циклу), як кордони масивів, для завдання елементів множин і типів-діапазонів.

У Паскалі, на відміну від Сі-подібних мов, з типами boolean і char арифметичні цілочисельні операції не визначені.

На відміну від багатьох поширених мов, Паскаль підтримує спеціальний тип даних безліч:

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 {Перевірка логічними умовами} ...

Для завдання значення безлічі використовується список елементів множини, відокремлених комами і ув'язнений в квадратні дужки (як уже було показано вище):

var {Секція оголошення змінних} d : set of char ; begin {Початок блоку} d : = [ 'A' , 'B' ] ; ...

У Паскалі Йенсен і Вірта рядка представлялися як упаковані масиви символів, отже, вони мали фіксовану довжину і зазвичай доповнювалися до цієї довжини пробілами.

У сучасному Паскалі [11] для роботи з рядками використовується вбудований тип string, що підтримує операції конкатенації ( +) та порівняння ( > < = <> >= <=). Рядки порівнюються в лексикографічному порядку. Наприклад, рядки вважаються рівними якщо вони мають однакову довжину і коди всіх символів з однаковими індексами збігаються.

Тип string [n] або просто string в діалектах мови 1970-1990-х років визначався у вигляді масиву символів array [0..n] of char (n за замовчуванням брало значення 80 в UCSD Pascal і 255 в Turbo / Borland Pascal), код нульового символу при такому поданні служить для завдання довжини рядка, відповідно рядок могла мати максимальний розмір 255 символів. За умовчанням в Delphi і FreePascal як String використовується тип AnsiString, пам'ять під який виділяється і звільняється компілятором динамічно, а максимальний розмір рядка в поточних реалізаціях складає 2 гігабайти. Крім того, в Delphi і Free Pascal як string може використовуватися тип WideString, де застосовується 16-бітове представлення символів в кодуванні UCS-2, при цьому кошти перетворення з однобайтових рядків у багатобайтові і назад в стандартній бібліотеці мови відсутні.

Нові типи можуть бути визначені з існуючих:

type {Секція оголошення типів} x = Integer ; Y = x; ...

Більше того, з примітивних типів можуть бути сконструйовані складові:

type {Секція оголошення типів} a = Array [ 1 .. 10 ] of Integer ; {Визначення масиву} b = record {Визначення запису} x : Integer ; Y : Char ; end ; C = File of a; {Визначення файлу}

Файлові типи в Паскалі діляться на типізовані, текстові та файли без типів.

Як показано в наведеному вище прикладі, типізовані файли в Паскалі - це послідовності однотипних елементів. Для кожного файлу існує змінна-вказівник на буфер, яка позначається f^. Процедури get (для читання) і put (для запису) переміщують покажчик до наступного елементу. Читання реалізовано так, що read(f, x) являє собою те ж, що і get(f); x:=f^. Відповідно, запис реалізована так, що write(f, x) являє собою те ж, що і f^ := x; put(f). Текстові файли text визначені як розширення типу file of char і крім стандартних операцій над типізований файлами (читання, запис символу), дозволяють здійснювати символьний введення-виведення в файл всіх типів даних аналогічно консольного вводу-виводу.

Файли без типів оголошуються як змінні типу file. З ними можна проводити операції побайтово нетипізовані вводу-виводу по кілька блоків байт зазначеної довжини через буфер, для цього є спеціальні процедури blockread і blockwrite (розширення UCSD).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]