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

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