Глава 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Синтаксис и семантика языка программирования Алфавит, методы формального описания синтаксиса Идентификаторы.

Презентация:



Advertisements
Похожие презентации
Язык программирования Pascal Выполнила: ученица 10А класса Елизавета Тельнова Г. Королев 2012 год.
Advertisements

turbo.exe основной файл среды Любой язык обладает алфавитом, синтаксисом и семантикой. В алфавит входит набор символов, использующихся в языке с помощью.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
1 ESC – ВЫХОД НА СЛЕДУЮЩИЙ миэт цко НА ПРЕДЫДУЩИЙ Алфавит языка Турбо-Паскаль: БУКВЫ И ЦИФРЫ 1. Прописные и строчные буквы латинского алфавита: A B C D.
Основы языка Pasсal.
Язык программирования Turbo Pascal. Программирование Программирование – это запись разработанного алгоритма на языке программирования. 4 Автор языка Паскаль.
«Типы данных». Целочисленные типы данных Тип ДиапазонТребуемая память (байт) byte shortint integer word longint
Данные в программах и алгоритмах Программы и их алгоритмы пишутся для обработки данных. Чтобы реализовать алгоритм, программам необходимо работать с данными.
Pascal 1 Основы языка Паскаль Информатика и ИКТ Смирнов М.В. МКО ООШ п. Климковка Белохолуницкого района Кировской области.
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Высокоуровневые методы информатики и программирования 1.Язык программирования высокого уровня Pascal 2.Объектно-ориентированное программирование.
1. Алфавит A – Z 0 – 9 Разделители лексем (пробел, конец строки, табуляция)
Язык программирования Pascal. Программа это упорядоченный список команд, необходимых для решения некоторой задачи. Языком программирования называют систему.
Типы данных в Turbo Pascal Шутилина Л.А.
Алгоритмы работы с величинами. Данные Компьютер-исполнитель работает с определенными данными по определенной программе. Данные - это множество величин.
Язык программирования Паскаль (Pascal). Структура программы на Паскале Заголовок программы Соглашения Описание меток Описание констант Описание переменных.
Пять основных классов типов данных: Простые типы; Структурированные типы; Ссылочные типы; Процедурные типы; Объектные типы;
Система типов языка программирования Turbo Pascal…
Тип, имя и значение переменной. В объектно-ориентированных языках программирования переменные играют такую же важную роль, как и в процедурных языках.
Переменная l. Определение Переменная - именованное место в памяти, в котором можно хранить некоторое значение.
Транксрипт:

Глава 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Синтаксис и семантика языка программирования Алфавит, методы формального описания синтаксиса Идентификаторы Константы Переменные и принципы размещения данных в оперативной памяти Типы переменных Выражения и операции Скалярные типы данных (логический, целые, символьный, перечисляемый, тип-диапазон, вещественные) Арифметические и логические операции, операции отношения Приоритет операций Структура программы

2 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Синтаксис языка программирования – это форма, а семантика – смысл его выражений, операторов и программных единиц. Формальное описание синтаксиса языка строится с использованием лексем – минимальных значимых единиц-элементов текста. Лексемы, которые являются названиями конструкций языка, называются нетерминальными символами или просто нетерминалами (например,,, и т. д.). Число нетерминалов равно числу правил языка. Собственные символы (символы алфавита) и лексемы языка, для которых не требуется специальное описание, называются терминальными символами или терминалами. Алфавит языка Тurbo Рascal включает: - прописные и строчные латинские буквы от a до z и от А до Z, а также знак подчеркивания; - арабские цифры от 0 до 9; - специальные символы + - * / =,. : ; [ ] ( ) { } $ # и пробел; - составные символы := .. = (* *) (вместо { }) (..) (вместо [ ]). Терминалами являются зарезервированные слова (begin end array const if then else и т.д.), в состав которых входят стандартные директивы (absolute assembler external far forward interrupt near private virtual).

3 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Форма Бэкуса-Наура (БНФ): if логическое выражение then оператор else оператор Методы формального описания синтаксиса языков программирования if then if then else Синтаксическая диаграмма:

4 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Лексемы текста программы языка Turbo Pascal представлены такими категориями как специальные символы, идентификаторы, зарезервированные слова, метки, числовые константы и строковые константы. Две соседние лексемы должны отделяться друг от друга разделителями. Идентификатор (имя) – это строка символов, используемая для идентификации некоторой сущности в программе (переменной, метки, подпрограммы, параметра и т.д.). Идентификаторы могут быть стандартные и пользовательские. Стандартные идентификаторы служат для обозначения заранее определенных разработчиками языка типов данных, констант, процедур и др. Правила построения идентификаторов: - идентификаторы могут иметь произвольную длину, но значащими будут только первые 63 символа; - всегда начинается буквой, за которой могут следовать буквы и цифры (символ подчеркивания считается буквой, пробелы и специальные символы недопустимы); - имена меток могут начинаться как буквой, так и цифрой. Синтаксическая диаграмма конструкции буква цифра буква

5 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Константа - элемент данных, значение которого не изменяется в процессе выполнения программы. Литерал представляет собой значение константы, записанное непосредственно в программе (например, в выражении *х использованы два литерала "2" и "5.1"). Поименованная константа объявляется в инструкции секции описания констант Const. Языки программирования интерпретируют данные как константы или переменные. Сonst идентификатор константы = литерал выражение ; Const Ln10 = ; Ln10R = 1 / Ln10; X = MaxInt div SizeOf(Real);

6 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Значениями констант в языке Тurbo Рascal могут быть: Целые числа (в диапазоне от до ). Вещественные числа. Может использоваться формат с фиксированной точкой или формат с плавающей точкой (а = 61.2; b = 3.14е5; c = -72Е-3). Шестнадцатеричные числа (в диапазоне от $ до $FFFFFFFF). Логические константы (True, False). Символы. Записываются в апострофах, кроме того допускается использование записи символа путем указания его внутреннего кода, которому предшествует символ # (Znak1 = 'd'; Znak2 = 'ф'; Znak3 = #90). Строки символов. Любая последовательность символов, заключенная в апострофы. Можно составить из кодов нужных символов с предшествующими каждому коду знаком #. Конструкторы множеств. Список элементов множества, обрамленный квадратными скобками (a = [1,2,4..7,12]; b = [red,blue,green]; c = [True]). Признак неопределенного указателя - NIL.

7 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Оперативная память разбита на сегменты – непрерывные области памяти размером 64 К (65536 байт). Начало любого сегмента отстоит от начала предыдущего на 16 байт. Память - это совокуп- ность перекрыва- ющихся сегментов. Логический адрес конкретной ячейки: сегмент : смещение 00000h 00010h 00020h 00030h 16 байт I сегмент (0000h) - 64 K II сегмент (0001h) - 64 K Смещение – номер ячейки памяти, отсчитанный относительно той ячейки, с которой начинается сегмент. физический адрес = сегмент*10h + смещение Например, ячейка с физическим адресом 00012h может иметь логический адрес $0001 : $0002 либо $0000 : $0012 (язык Turbo Pascal).

8 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ В сегменте данных (адрес хранится в регистре процессора DS) располагаются глобальные переменные и константы. Программа (последовательность команд) находится в кодовом сегменте (адрес - в регистре CS). Адрес сегмента стека - в регистре SS. Переменной называется поименованная область в памяти компьютера, выделяемая для хранения конкретных данных, значение которой может изменяться в ходе выполнения программы. Переменные интерпретируются однозначным способом – с помощью явного указания ее типа в специальном разделе описаний. Тип соответствует количеству байт, которые должны быть выделены в сегменте данных под эту переменную в соответствии с теми значениями, которые сможет принимать переменная. Var идентификатор переменной :; тип,

9 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Типы с уникальными именами описываются в специальной секции раздела описаний. Type идентификатор типа =; тип, Type LightType = (red, yellow, green); Var A, B, StreetLight : LightType; Если значение не структурное, то есть не распадается на компоненты, то оно называется скаляром, а сам тип, описывающий такие значения – скалярный тип. Параметры-атрибуты переменной: имя, адрес, значение, тип, время жизни, область видимости.

10 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Типизированная константа - переменная с заранее определенным значением. Const A : Real = 5.6; Выражение задает порядок выполнения действий над элементами данных и состоит из операндов (константы, переменные, обращения к функциям), знаков операций и круглых скобок. Операции определяют действия, которые надо выполнить над операндами. Операция - атрибут типа. (X + sin(Y) - 10)*4 X,sin(Y),10,4 – операнды, "+","-","*" – операции. Унарные операции относятся к одному операнду и всегда записываются перед ним +, - ). Бинарные операции выражают отношение между двумя операндами и записываются между ними (X + Y).

11 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Значениями переменных логического (булевского) типа могут быть логические константы True, либо False. Var X : Boolean; Под размещение переменной логического типа требуется 1 байт памяти. Логические переменные могут выступать операндами в логических операциях. Логический тип Операнд 1 Операнд 2 and (конъюнкция) or (дизъюнкция) xor (исключающее ИЛИ) not (отрицание) False - TrueFalse True - FalseTrueFalseTrue - False- True----False ----True

12 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Целочисленные типы НазваниеДлина, байтДиапазон значений Byte ShortInt Word Integer LongInt К операндам целочисленных типов могут быть применены арифметические операции. Результат операций сложения "+", вычитания "-", умножения "*", целочисленного деления div, возвращения остатка от целочисленного деления mod относится к целому типу – наименьшему, включающему типы операндов (общий тип). Результат операции деления "/" относится к наиболее мощному вещественному типу Extended. Var X : Byte; Y : Word;... Z := X + Y; {Z Word}

13 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Арифметические операции сдвига K shl N и K shr N оперируют с двоичным (битовым) представлением целых чисел. Они восстанавливают в качестве результата значение, полученное путем сдвига на N позиций влево или вправо числа К, представленного в двоичном виде. Тип результата – общий тип. 2 shl 7 = 256; (2) 10 = (10) 2 ; ( ) 2 = (256) shr 2 = 40; (161) 10 = ( ) 2 ; (101000) 2 = (40) 10. При использовании логичес- ких операций применитель- но к целым числам осущест- вляется побитное (пораз- рядное) сравнение операн- дов. Тип результата – общий тип. Двоичные циф- ры результата образуются по следующим правилам: Операнд 1Операнд 2andorxornot or 22 = 30; (12) 10 = (01100) 2 ; (22) 10 = (10110) 2 ; (11110) 2 = (30) 10. Х : Byte = 5; (X) 2 = ; not X = ( ) 2 = (250) 10. X : ShortInt = 5; (X) 2 = ; not X = ( ) 2 = (-6) 10.

14 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Символьный тип Значениями переменных символьного типа является множество всех символов компьютера. Каждому символу приписывается целое число (код) в диапазоне В основе кодировки лежит 7-битный код ASCII (American Standard Code of Information Interchange). Символы с кодами отводятся под национальный алфавит. Var X : Char;... X := 'ф'; X := #228; Под переменную типа Char отводится 1 байт памяти. Применимы встроенные функции: CHR(X) - преобразует выражение Х : Byte в символ и возвращает этот символ; UPCASE(X) - возвращает прописную букву, если Х - строчная латинская буква, в противном случае (например, если Х - русская буква) возвращает сам символ Х.

15 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Перечисляемый тип Перечисляемый тип задается перечислением тех значений, которые он может получать. Значения перечисляемого типа должны иметь синтаксис идентификаторов. Type Colors = (red, white, blue); Var Color1, Color2 : Colors; Var Color3 : (red, white, blue);... Color3 := red;

16 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Тип-диапазон Тип-диапазон – это подмножество базового типа, в качестве которого может выступать любой целый, логический, символьный или перечисляемый тип. Тип-диапазон задается границами своих значений внутри базового типа. Type Digit1 = '1'..'9'; {базовый тип - Char} Digit2 = 1..9; {базовый тип - целый} Var LatCht : 'A'..'Z'; {базовый тип - Сhar} Стандартные функции: HIGH(X) – возвращает максимальное значение типа-диапазона. LOW(X) – возвращает минимальное значение типа-диапазона.

17 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Рассмотренные скалярные типы (целые, символьный, логический, перечисляемый, тип-диапазон) относятся к классу порядковых типов. Все значения порядкового типа можно упорядочить, с каждым из них можно сопоставить целое число - порядковый номер значения. К любому из порядковых типов применима функция ORD(X), которая возвращает порядковый номер значения Х. Целые типы: ORD(X) = X. Логический тип: ORD(False) = 0, ORD(True) = 1. Символьный тип: ORD(X) = код символа X. Перечисляемый тип: ORD(X) = целое число в соответствии с положением Х в списке. Тип-диапазон: ORD(X) определяется свойствами базового типа. Var С,D : Char; begin C := 'f'; D := PRED(C); end. Стандартные функции: PRED(X) – возвращает предыдущее значение порядкового типа; ORD(PRED(X)) = ORD(X) - 1. SUCC(X) – возвращает следующее значение порядкового типа; ORD(SUCC(X)) = ORD(X) + 1;

18 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Вещественные типы НазваниеДлина, байтКоличество значащих цифрДиапазон десятичного порядка Real Single Double Extended Comp (диапазон значений) Обработка вещественных чисел выполняется с некоторой конечной точностью, зависящей от его внутреннего формата.

19 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ 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). ( ) 10 = ( ) 2 = ( ) 2 2 3, т.е. t = (3) 10, m 1 = ( ) 2. s = 1, e = 3 + (2 4 – 1) = (18) 10 = (10010) 2, m = m = – Структура вещественных чисел в памяти компьютера соответствует представлению с плавающей точкой: s знак (1 бит) е экспоненциальная часть(d бит) m мантисса (r бит) 1 + d + r = 8N, где N – число байт, отводимых под переменную данного типа (Single - e = 8 бит, r = 23 бита; Extended - e = 15 бит; r = 64 бита).

20 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Все вещественные типы (кроме Real) вводятся в расчете на арифметический сопроцессор – устройство, которое подключается непосредственно к центральному процессору и предназначенное для выполнения операций над числами в формате с плавающей точкой и длинными целыми числами (требуется ключ директивы компилятора {$N+}). Сопроцессор всегда обрабатывает числа в формате Extended (остальные вещественные типы получаются усечением результатов до нужных размеров). Var E1,E2 : Extended; E3 : Double; Result : Single;... Result := E1*E2/E3; Значения типа Comp (compound) – вещественные представления "больших" целых чисел. Тип Comp совместим с другими вещественными типами, над ним определены все "вещественные" операции, процедуры, функции. Результат арифметических операций с вещественными операндами имеет тип Extended. Возможные ситуации, когда результат арифметических операций не удовлетворяет ограничениям на диапазон (или форму) представляемых чисел: - переполнение ( Var X,Y:Integer;...X:=20000; Y:=15000; X:=X+Y; ) - "исчезновение порядка".

21 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Операции отношения Операции отношения выполняют сравнение двух совместимых операндов и определяют, истинно значение выражения или ложно. Определены для скалярных типов, строк и множеств. Результат – True или False. ОперацияНазваниеВыражениеРезультат =РавноА = ВTrue, если А равно В Не равноА BTrue, если А не равно В >БольшеA > BTrue, если А больше В =Больше или равноА >= BTrue, если А больше или равно В

22 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Приоритет операций операнд, находящийся между двумя операциями с различными приоритетами, связывается с операцией, имеющей более высокий приоритет; операнд, находящийся между двумя операциями с равными приоритетами, связывается с операцией, которая находится слева; выражение, заключенной в скобки, перед выполнением вычисляется, как отдельный операнд; not1 (высший) *, /, div, mod, and, shr, shl2 +, -, or, xor3 >,, =, =, in4 (низший) Правила для определения старшинства операций:

23 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Структура программы Program ; Uses,,...; Label 1,m1,Stop; Const MaxN: Word = 100; {Типизированная константа} Kod = $124; {Шестнадцатеричная константа} Type Matrix = array [1..10] of Real; Dni = 1..31; Var A,B,C : Integer; Result : Matrix; Procedure ; ;...; Function ; ;...; BEGIN ; END.

24 Гл. 5. БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ Программа состоит из заголовка, раздела описаний и раздела операторов. Любой подраздел раздела описаний может отсутствовать, если в нем нет необходимости. Подразделы Label, Type, Const, Var могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколько угодно раз. При этом обязательно соблюдение правила: все, что в программе используется, должно быть перед этим описано. Комментарии - это произвольный поясняющий текст в любом месте программы, заключенный в фигурные скобки { } или между двойными символами (* *). Директивы компилятора используются программистом для управления режимами компиляции, т.е. включать или выключать контроль ошибок, использовать или эмулировать математический сопроцессор, изменять распределение памяти и т.д. Эти директивы заключаются в фигурные скобки и имеют отличительный признак $, после чего указывается буква-ключ с последующим знаком "+" (включить режим) или "-" (выключить). Например, {$R-} – отключить проверку диапазонов индексов массивов, {$N+} – использовать сопроцессор 80х87.