- •Начальные сведения
- •Алфавит
- •Лексемы, разделители и комментарии
- •Форма Бэкуса-Наура
- •Структура программы на Паскале
- •Типы данных
- •Базовые возможности Паскаля
- •Стандартные типы данных
- •Константы
- •Конструирование типов
- •Перечисления
- •Диапазоны (интервалы)
- •Массивы
- •Описание переменных и типов данных
- •Var a,b,c: Real; {описаны переменные вещественного типа}
- •I,j,k,l,m,n:Integer; {описаны переменные целого типа}
- •Оператор присваивания
- •Условные операторы
- •Оператор If
- •Оператор Case
- •Операторы цикла
- •Цикл While
- •Цикл Repeat-Until
- •Цикл For
- •Оператор безусловного перехода и метки
- •Пустой оператор
- •1: End; {конец тела цикла с помеченным пустым оператором}
- •Процедуры и функции
- •Описание
- •Список формальных параметров
- •Вызов процедур и функций
- •Локализация (области видимости) имен. Глобальные и локальные объявления.
- •Статическое и динамическое выделение памяти переменным
- •Рекурсия и опережающее описание
- •Стандартные функции
- •Стандартные процедуры
- •Стандартный ввод-вывод
- •Сложные типы данных и их использование
- •Квалификаторы
- •Конструкция записи, тип записи и переменная типа запись
- •Id:Person; {личные данные}
- •Id:Person; {личные данные}
- •Index: Ch; {Название/номер группы}
- •Использование записей в программе
- •Оператор With
- •Записи с вариантными полями
- •0:(I:Integer) {Два байта как одно поле Integer}
- •1:(Lo,hi:Char); {отдельно младш. И старш. Байты}
- •Var e: Integer; {в этой переменной будем менять байты}
- •Указатели и динамические структуры данных
- •Определение и описание
- •I:integer; {Информационное поле}
- •Var p,q:Point; {переменные-указатели на записи типа Rec}
- •Использование указателей и динамических переменных
- •Создание и уничтожение динамических переменных
- •Простейшие динамические структуры
- •Множества
- •Назначение и описание
- •Константы типа множество
- •Операции с множествами
- •Назначение и описание
- •Работа с файлами
- •Файлы типа Text
Структура программы на Паскале
<программа>::=<заголовок программы> ";" <блок> ".".
<заголовок программы>::="Program" <имя> ["(" <список файлов> ")"].
<блок>::=
["Label" <список меток> ";"]
["Const" <описание константы> {";"<описание константы>} ";"]
["Type" <описание типа данных> {";"<описание типа данных>} ";"]
["Var" <описание переменных> {";"<описание переменных>} ";"]
{<процедура>|<функция>}
<составной оператор>.
Таким образом, программа начинается словом Program и заканчивается точкой. Программа состоит из заголовка и блока. Блок состоит из нескольких или ни одного разделов описаний и одного составного оператора со сколь угодно сложной структурой.
Заголовок программы во многих реализациях не обязателен.
Последовательность разделов описаний в стандартном Паскале фиксирована.
<составной оператор>::="Begin" [ <оператор> {";" <оператор> } ] "End".
Лексема оператор может быть определена, как любой из операторов Паскаля, в том числе и составной оператор. Остальные операторы рассматриваются позднее. Также позднее рассматриваются описания меток, констант, типов данных, переменных, процедур и функций.
Пример программы, которая совсем ничего не делает:
Program Empty;
begin
end.
Типы данных
Структура типов данных
Простые
Диапазоны
Скалярные
Перечисления
Стандартные
Integer
Boolean
Char
Real
Сложные
Массивы
Записи
Множества
Файлы
Указатели
Стандартные типы данных предоставляются программисту в готовом виде. Их также называют предопределенными. Все остальные типы программист конструирует сам.
Все простые типы кроме типа Real называют ординальными (т.е., упорядоченными).
Базовые возможности Паскаля
Стандартные типы данных
Тип Integer
Это тип для представления целочисленных значений. На ПЭВМ обычно он представляется двумя байтами, что позволяет представлять значения от –32768 до +32767. Значения целого типа записываются в программе как целое число со знаком, причем, знак «+» не обязательный. Формальное описание:
<целое>::= [<знак>] <целое без знака>.
<целое без знака>::= <цифра> {<цифра>}.
<знак>::=”+”|”–“.
Примеры: 4 –32000 +55
Тип Real
Это тип для представления вещественных значений. В ЭВМ значения этого типа представляются в специальном формате с плавающей точкой, что позволяет оперировать с очень большими и очень малыми числами.
<вещественное>::=<целая часть> "." <дробная часть>| <мантисса><показатель степени>.
<целая часть>::=<целое>.
<дробная часть>::=<целое без знака>.
<мантисса>::=<целая часть>["."<дробная часть>].
<показатель степени>::=(“E”|”e”) <целое>.
Таким образом, есть два формата представления вещественных чисел – обычный математический и инженерный (экспоненциальный).
Примеры: 1.0 –-50.6 1е-4 –2.35Е20 +1.2е+7
Неверная запись вещественных чисел в Паскале: 5 .2 3.
В некоторых языках допускается опускать ноль перед или после десятичной точки, но в Паскале это считается нарушением синтаксиса.
Тип Boolean
Этот тип представляет логические значения. Есть только два логических значения, ложь и истина, представляемых, соответственно, именами False и True. В Паскале считается, что логические значения упорядочены по возрастанию, причем, True больше, чем False.
<логическое значение>::=”False”|”True”.
В компьютере логические значения обычно представляются одним байтом. Значению False соответствует байт, содержащий нулевые биты, значению True – любой байт, содержащий хотя бы один ненулевой бит.
Тип Char
Это тип для представления символьных значений. Значения этого типа – любые знаки, имеющиеся в знакогенераторе компьютера, заключенные между двумя апострофами. Для изображения апострофа нужно удвоить его, т.е., записать два апострофа между двумя апострофами.
Примеры: 'A' 's' '+' '*' 'ы' ''''