chapter_5_for_print


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Глава
5͘ БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА
ПРОГРАММИРОВАНИЯ

Синтаксис
и семантика языка программирования

Методы описания
синтаксиса

Идентификаторы

Константы

Адресация
в оперативной
памяти

Переменные

Типы

Выражения и операции

Скалярные типы данных (логический͕ целые͕ символьный͕
перечисляемый͕ тип
-
диапазон͕ вещественные)

Арифметические и логические операции͕ операции
отношения

Приоритет операций

Структура программы
2
СИНТАКСИС И СЕМАНТИКА
Синтаксис
языка программирования

это форма͕ а
семантика

смысл его
выражений͕ операторов и программных
единиц͘
Формальное
описание синтаксиса языка строится с использованием терминалов
и
нетерминалов
͘ Конструкции языка͕ для которых требуются определения͕
называются нетерминальными символами или просто
нетерминалами
(например͕ <оператор>͕ <число>͕ <условный оператор> и т͘ д͘)͘ Число
нетерминалов
равно числу правил языка͘ Собственные символы (символы
алфавита) и конструкции языка͕ для которых не требуется специальное описание͕
называются терминальными символами или
терминалами
.
Алфавит
языка
Тurbo
Рascal
включает͗
-
прописные и строчные латинские буквы от
a
до
z
и от
А
до
Z
͕ а также знак
подчеркивания͖
-
арабские цифры от
0
до
9
;
-
специальные символы
+
-
* / = ͕ ‘ ͘ ͗ ͖ < > ΀ ΁ ( ) { } ^ @ $ #
и
пробел
;
-
составные символы
:=� .. = &#x-4=-; 4 ; = (* *)
(вместо
{ }
)
(. .)
(вместо
[
]
).
Терминалами
также являются
зарезервированные слова
(
begin end array
const
if then else
и т͘д͘)͕ в состав которых входят
стандартные директивы
(
absolute
assembler external far forward interrupt near private virtual
).
Гл͘ 5͘ Базовые элементы языка программирования
Гл͘ 5͘ Базовые элементы языка программирования
3
МЕТОДЫ ФОРМАЛЬНОГО ОПИСАНИЯ СИНТАКСИСА ЯЗЫКА
Форма
Бэкуса
-
Наура (БНФ
):

цифра


0

1

2

3

4

5

6

7

8

9

условный
оператор


if
логическое
выражение

then

оператор


if

логическое
выражение

then

оператор

else
<оператор

Синтаксическая диаграмма
(условный оператор)͗
if
логическое
выражение
then
оператор
else
оператор
Текст
программы состоит из
лексем
͘ Лексемы языка
Turbo
Pascal
представлены
такими категориями как специальные символы͕ идентификаторы͕
зарезервированные слова͕ метки͕ числовые константы и строковые константы͘
Две соседние лексемы должны отделяться друг от друга
разделителями
.
Идентификатор (имя)

это строка символов͕ используемая для идентификации
некоторой сущности в программе (переменной͕ метки͕ подпрограммы͕
параметра и т͘д͘)͘ Идентификаторы могут быть
стандартные
и
пользовательские
.
Стандартные идентификаторы служат для обозначения заранее определенных
разработчиками языка типов данных͕ констант͕ процедур и др
.
Правила
построения идентификаторов
:
-
идентификаторы могут иметь произвольную длину͕ но значащими будут только
первые 63 символа͖
-
всегда начинается буквой͕ за которой могут следовать буквы и цифры (символ
подчеркивания считается буквой͕ пробелы и специальные символы
недопустимы)͖
-
имена меток могут начинаться как буквой͕ так и
цифрой
.
Синтаксическая
диаграмма
конструкции
<идентификатор>
Гл͘ 5͘ Базовые элементы языка программирования
4
ИДЕНТИФИКАТОРЫ
буква
цифра
буква
Гл͘ 5͘ Базовые элементы языка программирования
5
КОНСТАНТЫ
Языки программирования интерпретируют данные как
константы
или
переменные
.
Константа

элемент
данных͕ значение которого не изменяется в процессе
выполнения программы͘
Литерал
представляет собой значение константы͕ записанное непосредственно в
программе (например͕ в выражении 2 + 5͘1*х использованы два литерала "2" и
"5.1").
Поименованная константа
объявляется в инструкции секции описания констант
Const
.
Const
Ln
10 = 2.3026;
Ln10R = 1 / Ln10;
X =
MaxInt
div
SizeOf
(Real);
Гл͘ 5͘ Базовые элементы языка программирования
6
Значениями
констант в языке Т
urbo
Р
ascal
могут быть͗

Целые числа (в диапазоне от
-
2 147 483 648 до 2 147 483 647)͘

Вещественные числа͘ Может использоваться
формат с фиксированной точкой
или
формат с плавающей точкой
(а = 61͘2͖
b =
3͘14е5͖
c
=
-
72Е
-
3
).

Шестнадцатеричные числа
(
в диапазоне от $00000000 до $
FFFFFFFF
).

Логические константы (
True
,
False
).

Символы͘ Записываются в апострофах͕ кроме того допускается использование
записи символа путем указания его внутреннего кода͕ которому предшествует
символ # (
Znak
1 = '
d
';
Znak
2 = 'ф'͖
Znak3 =
#90
).

Строки символов͘ Любая последовательность символов͕ заключенная в
апострофы͘ Можно составить из кодов нужных символов с предшествующими
каждому коду знаком #͘

Конструкторы множеств͘ Список элементов множества͕ обрамленный
квадратными скобками (
a = [1,2,4..7,12]; b = [
red,blue,green
]; c = [True]
)
.

Признак неопределенного указателя
-
NIL
.
КОНСТАНТЫ
Гл͘ 5͘ Базовые элементы языка программирования
7
ЛОГИЧЕСКАЯ АДРЕСАЦИЯ
Оперативная
память
разбита на
сегменты

непрерывные области
памяти размером 64 К
(65536 байт)͘ Начало
любого сегмента отстоит
от начала предыдущего на
16
байт͘
Память

это
совокупность
65536
перекрывающихся
сегментов
.
Логический
адрес
конкретной ячейки͗
сегмент : смещение
Смещение

номер ячейки памяти͕ отсчитанный относительно той ячейки͕ с
которой начинается сегмент
.
физический
адрес = сегмент*10h +
смещение
Например
͕ ячейка с
физическим адресом
00012h
может иметь
логический
адрес
$0001 : $0002
либо
$0000 : $0012
(язык
Turbo
Pascal
).
00000
h
000
1
0
h
000
2
0
h
000
3
0
h
16
байт
16
байт
16
байт
I
сегмент
(0000
h
)
-
64
K
II
сегмент
(000
1h
)
-
64
K
физические адреса
Гл͘ 5͘ Базовые элементы языка программирования
8
ПЕРЕМЕННЫЕ
В
сегменте данных
(номер хранится в регистре процессора D{) располагаются
глобальные переменные и константы͘ Программа (последовательность команд)
находится в
кодовом сегменте
(номер

в
регистре C{)͘ Номер сегмента стека

в
регистре {{͘
Стек
используется для хранения локальных данных подпрограмм͘
Переменной
называется поименованная область в памяти компьютера͕
выделяемая для хранения конкретных данных͕ значение которой может
изменяться в ходе выполнения программы͘ Переменные интерпретируются
однозначным способом

с помощью явного указания ее
типа
в специальном
разделе описаний͘ Тип соответствует количеству байт͕ которые должны быть
выделены в сегменте данных под эту переменную в соответствии с теми
значениями͕ которые сможет принимать переменная͘
Гл͘ 5͘ Базовые элементы языка программирования
9
ТИПЫ
Типы с уникальными именами описываются в специальной секции раздела
описаний
.
T
ype
LightType
= (red, yellow, green);
Var
A, B,
:
LightType
;
Если
значение не структурное͕ то есть не распадается на компоненты͕ то оно
называется
скаляром
͕ а сам тип͕ описывающий такие значения

скалярный тип
.
Параметры
-
атрибуты
переменной͗ имя͕ адрес͕ значение͕ тип͕ время жизни͕
область видимости͘
Гл͘ 5͘ Базовые элементы языка программирования
10
ВЫРАЖЕНИЯ͕ ОПЕРАЦИИ
Типизированная константа

переменная
с заранее определенным
значением͘
Const
A :
Real
= 5.6
;
Выражение
задает порядок выполнения действий над элементами данных и
состоит из
операндов
(константы͕ переменные͕ обращения к функциям)͕ знаков
операций
и
круглых скобок
.
Операции
определяют действия͕ которые надо
выполнить над операндами͘ Операция

атрибут
типа
.
(X +
sin
(Y)
-
10)*4
X,sin
(Y),10,4

операнды͕
"+","
-
","*"

операции͘
Унарные операции
относятся к одному операнду и всегда записываются перед
ним (
not
, @, +,
-
).
Бинарные операции
выражают отношение между двумя операндами и
записываются между ними (X + Y)͘
Гл͘ 5͘ Базовые элементы языка программирования
11
ЛОГИЧЕСКИЙ ТИП
Значениями переменных логического (булевского) типа могут быть логические
константы
True
,
False
.
Var
X :
Boolean
;
Под размещение переменной логического типа требуется 1 байт памяти͘
Логические переменные могут выступать операндами в
логических операциях
.
Операнд
1
Операнд
2
and
(
конъюнкция)
or
(
дизъюнкция)
xor
(исключающее ИЛИ)
not
(
отрицание)
False
False
False
False
False
-
True
False
False
True
True
-
False
True
False
True
True
-
True
True
True
True
False
-
True
-
-
-
-
False
False
-
-
-
-
True
Гл͘ 5͘ Базовые элементы языка программирования
12
ЦЕЛОЧИСЛЕННЫЕ ТИПЫ
К операндам целочисленных типов могут быть применены
арифметические
операции
.
Результат операций сложения "+"͕ вычитания "
-
"͕ умножения "*"͕
целочисленного деления
div
͕ возвращения остатка от целочисленного деления
mod
относится к целому типу

наименьшему͕ включающему типы
операндов и
результата
(
общий тип
)͘ Результат операции деления "/" относится к наиболее
мощному вещественному типу
Extended
.
Var
X : Byte; Y :
ShortInt
;
... Z := X + Y; {Z

Integer}
Название
Длина͕ байт
Диапазон значений
Byte
1
0..255
ShortInt
1
-
128..+127
Word
2
0..65535
Integer
2
-
32768..+32767
LongInt
4
-
2 147 483 648..+2 147 483 647
Гл͘ 5͘ Базовые элементы языка программирования
13
ЦЕЛОЧИСЛЕННЫЕ ТИПЫ
Арифметические
операции
сдвига
K
shl
N и K
shr
N оперируют с двоичным
(битовым) представлением целых чисел͘ Они восстанавливают в качестве
результата значение͕ полученное путем сдвига на N позиций влево или вправо
числа К͕ представленного в двоичном виде͘ Тип результата

общий тип͘
2
shl
7 = 256; (2)
10
= (10)
2
; (100000000)
2
= (256)
10
.
161
shr
2 = 40; (161)
10
= (10100001)
2
; (101000)
2
= (40)
10
.
При использовании
логичес
-
ких
операций
применитель
-
но
к целым числам
осущест
-
вляется
побитное (
поразряд
-
ное
) сравнение
операндов͘
Тип
результата

общий
тип͘
Двоичные цифры результата
образуются
по
следующим
правилам
:
12
or
22 = 30; (12)
10
= (01100)
2
; (22)
10
= (10110)
2
; (11110)
2
= (30)
10
.
Х
:
Byte
= 5;
(X)
2
= 00000101
;
X := not X = (11111010)
2
=
(250)
10
.
X
:
ShortInt
= 5;
(X)
2
= 0 0000101
;
X := not X = (1 1111010)
2
=
(
-
6)
10
.
Операнд 1
Операнд 2
and
or
xor
not
0
0
0
0
0
-
1
0
0
1
1
-
0
1
0
1
1
-
1
1
1
1
0
-
1
-
-
-
-
0
0
-
-
-
-
1
Гл͘ 5͘ Базовые элементы языка программирования
14
СИМВОЛЬНЫЙ ТИП
Значениями переменных символьного типа является множество всех символов
компьютера͘ Каждому символу приписывается целое число (код) в диапазоне
0...255.
В основе кодировки лежит 7
-
битный код
ASCII
(
American
Standard
Code
of
Information
Interchange
)͘ Символы с кодами 128͘͘255 отводятся под
национальный
алфавит͘
Var
X : Char
;
...
X := '
ф
'
;
X := #228
;
Под
переменную типа
Char
отводится 1 байт памяти͘
Применимы встроенные функции͗
CHR(X)

преобразует
выражение Х ͗
Byte
в символ и возвращает этот символ͖
UPCASE(X)

возвращает
прописную букву͕ если Х

строчная латинская буква͕ в
противном случае (например͕ если Х

русская буква) возвращает сам символ Х
.
Гл͘ 5͘ Базовые элементы языка программирования
15
ПЕРЕЧИСЛЯЕМЫЙ ТИП
Перечисляемый
тип задается перечислением тех значений͕ которые он может
получать͘ Значения перечисляемого типа должны иметь синтаксис
идентификаторов
.
Type
Colors = (red, white, blue);
Var
Color1, Color2 : Colors;
Var
Color3 : (red, white, blue);
...
Color3 := red
;
Гл͘ 5͘ Базовые элементы языка программирования
16
ТИП
-
ДИАПАЗОН
Тип
-
диапазон

это подмножество
базового типа
͕ в качестве которого может
выступать любой целый͕ логический͕ символьный или перечисляемый тип͘ Тип
-
диапазон задается границами своих значений внутри базового типа
.
Type
Digit
1 = '1'..'9';
{
базовый тип
-
Char}
Digit2 = 1..9; {
базовый тип
-
целый
}
Var
LatCht
: 'A'..'Z'; {
базовый тип
-
С
har
}
Стандартные
функции͗
HIGH(X)

возвращает максимальное значение типа
-
диапазона͘
LOW(X)

возвращает минимальное значение типа
-
диапазона͘
Гл͘ 5͘ Базовые элементы языка программирования
17
ПОРЯДКОВЫЕ ТИПЫ
Рассмотренные
скалярные типы (целые͕ символьный͕ логический͕
перечисляемый͕ тип
-
диапазон) относятся к классу
порядковых типов
͘ Все
значения порядкового типа можно
упорядочить
͕ с каждым из них можно
сопоставить целое
число

порядковый
номер значения
.
К любому из порядковых типов применима функция
ORD(X)
͕ которая возвращает
порядковый номер значения Х͘
Целые
типы͗ hRD(X) = X͘
Логический
тип͗ hRD(
False
) = 0, ORD(
True
) = 1.
Символьный
тип͗ hRD(X) = код символа X͘
Перечисляемый
тип͗ hRD(X) = целое число 0͘͘65535 в соответствии с положением
Х в списке͘
Тип
-
диапазон
͗ hRD(X) определяется свойствами базового
типа͘
Стандартные функции͗
PRED(X)

возвращает предыдущее значение порядкового типа͖
ORD(PRED(X
)) = ORD(X)
-
1.
SUCC(X)

возвращает следующее значение порядкового типа͖
ORD(SUCC(X
)) = ORD(X) + 1
;
Var
С
,D : Char;
begin C := 'f'; D := PRED(C); end
.
Гл͘ 5͘ Базовые элементы языка программирования
18
ВЕЩЕСТВЕННЫЕ ТИПЫ
Обработка
вещественного числа
выполняется с некоторой
конечной точностью
,
зависящей от его внутреннего
формата (типа)͘
Название
Длина͕ байт
Количество значащих цифр
Диапазон десятичного порядка
Real
6
11..12
-
39
..
+38
Single
4
7..8
-
45..+38
Double
8
15..16
-
324..+308
Extended
10
19..20
-
4951..+4932
Comp
8
19..20
-
9.2

10
+18
..9.2

10
18
(
-
2
63
+1..2
63
+1)
(
диапазон значений)
Гл͘ 5͘ Базовые элементы языка программирования
19
ПРЕДСТАВЛЕНИЕ ВЕЩЕСТВЕННЫХ ЧИСЕЛ В ПАМЯТИ
Структура
вещественных чисел в памяти компьютера соответствует
представлению
в формате с
плавающей точкой
:
1 + d + r = 8N͕ где N

число байт͕ отводимых под переменную данного типа
(
Single

d = 8 бит͕ r = 23 бита͖
Extended

d = 15 бит͖ r = 64 бита
).
s = 0͕ если знак числа "+"͖ s = 1͕ если знак "
-
";
е

задает истинный порядок числа t = e

(2
d
-
1

1);
m

задает мантиссу (дробную часть) m
1
=
m∙2
-
r
(0

m
1
1).
Записанное число может быть определено по формуле͗
(
-
1)
s
∙(
1+m
1
)∙2
t

нормализованная запись
Пример
͗ размещение
числа
(
-
12.375)
10
в области памяти длиной N = 2 байта
(s = 1, d = 5, r = 10).
(
-
12.375)
10
= (
-
1100.011)
2
= (
-
1.100011)
2
∙2
3
͕ т͘е͘ t = (3)
10
, m
1
= (
0.100011)
2
s
= 1,
e
= 3 + (2
4

1) = (18)
10
= (10010)
2
,
m
=
m
1
∙2
10
=
(1000110000)
2
-
12.375

1 10010
1000110000
s
знак (1 бит)
е
экспоненциальная часть(
d
бит)
m
мантисса (
r
бит)
Гл͘ 5͘ Базовые элементы языка программирования
20
Все
вещественные типы (кроме
Real
) введены в расчете на
арифметический
сопроцессор

устройство͕ которое подключается непосредственно к
центральному процессору и
предназначено
для выполнения операций над
числами в формате с плавающей точкой и длинными целыми числами (требуется
ключ директивы компилятора {$N+})͘ Сопроцессор всегда обрабатывает числа в
формате типа
Extended
(остальные вещественные типы получаются усечением
результатов до нужных размеров)͘
Var
E1,E2 : Extended; E3 : Double; Result : Single;
...
Result := E1*E2/E3;
Значения
типа
Comp

вещественные представления "больших" целых чисел͘ Тип
Comp
совместим с другими вещественными типами͕ над ним определены все
"вещественные" операции͕ процедуры͕ функции͘
Возможные
ситуации͕ когда результат арифметических операций
не
удовлетворяет
ограничениям на диапазон (или форму) представляемых чисел͗

переполнение
(
Var
X,Y:Integer
;...X:=20000; Y:=15000; X:=
X+Y
;
)

"
исчезновение порядка"͘
ВЕЩЕСТВЕННЫЕ ТИПЫ
Гл͘ 5͘ Базовые элементы языка программирования
21
Операции
отношения выполняют сравнение двух
совместимых
операндов и
определяют͕ истинно значение выражения или ложно͘ Определены для
скалярных типов͕ строк и множеств͘ Результат

True
или
False
.
ОПЕРАЦИИ ОТНОШЕНИЯ
Операция
Название
Выражение
Результат
=
Равно
А = В
True
͕ если А равно В

Не равно
А
&#x-200; B
True
͕ если А не равно В

Больше
A� B
True
͕ если А больше В

Меньше
А
B
True
͕ если А меньше В
�=
Больше или равно
А
�= B
True
͕ если А больше или равно В
=
Меньше или равно
А
= B
True
,
если А меньше или равно В
in
Принадлежность
А
in M
True
,
если А принадлежит
множеству М
Гл͘ 5͘ Базовые элементы языка программирования
22
Правила для определения старшинства операций͗

операнд
͕ находящийся между двумя операциями с различными приоритетами͕
связывается с операцией͕ имеющей более высокий
приоритет͖

операнд
͕ находящийся между двумя операциями с равными приоритетами͕
связывается с операцией͕ которая находится
слева͖

выражение
͕ заключенной в скобки͕ перед выполнением вычисляется͕ как
отдельный
операнд͘
ПРИОРИТЕТ ОПЕРАЦИЙ
Операции
Приоритет
@, not
1 (высший)
*, /,
div, mod, and, shr, shl
2
+,
-
, or, xor
3
�, , &#x-200;, =, =,&#x=-4,; 00; =, in
4 (
низший)
Гл͘ 5͘ Базовые элементы языка программирования
23
СТРУКТУРА ПРОГРАММЫ
Program
<имя программы>;
Uses
имя
1>,<имя2>
,...
;
Label
1,m1,Stop;
Const
MaxN
:
Word
= 100; {Типизированная константа}
Kod
=
$2
0
;
{
Ш
естнадцатеричн
ая
к
онстанта}
Type
Matrix = array
[1
..Kod]
of Real;
Dni
= 1..31;
Var
A,B,C : Integer;
Result : Matrix;
Procedure
имя
�;
<тело процедуры>;
...;
Function
<имя>;
<тело функции>;
...;
BEGIN
<операторы>;
END.
Гл͘ 5͘ Базовые элементы языка программирования
24
Программа
состоит из заголовка͕ раздела описаний и раздела операторов͘
Любой подраздел раздела описаний может отсутствовать͕ если в нем нет
необходимости͘ Подразделы
Label
,
Type
,
Const
,
Var
могут следовать друг за
другом в любом порядке и встречаться в разделе описаний сколько угодно раз͘
При этом обязательно соблюдение правила͗
все͕ что в программе используется͕
должно быть перед этим описано
.
Комментарии

это
произвольный поясняющий текст в любом месте программы͕
заключенный в фигурные скобки { } или между двойными символами (* *)͘
Директивы компилятора
используются программистом для управления
режимами
компиляции
(
включать
или выключать контроль ошибок͕ использовать
или эмулировать математический сопроцессор͕ изменять распределение памяти
и т͘д
.
)
Эти директивы заключаются в фигурные скобки и имеют отличительный
признак $͕ после чего указывается буква
-
ключ с последующим знаком "+"
(включить режим) или "
-
" (выключить)͘ Например͕ {$R
-
}

отключить проверку
принадлежности заданному диапазону͕
{$N+}

использовать сопроцессор 80х87͘
СТРУКТУРА ПРОГРАММЫ

Приложенные файлы

  • pdf 1251651
    Размер файла: 637 kB Загрузок: 0

Добавить комментарий