- •СОДЕРЖАНИЕ
- •Раздел 1. ОБЩИЕ СВЕДЕНИЯ О ПРОГРАММНОМ ОБЕСПЕЧЕНИИ
- •1.1. Принцип программного управления
- •1.2. Автоматическое выполнение команд программы
- •1.3. Этапы постановки и решения задачи на компьютере
- •1.4. Назначение и классификация языков программирования
- •1.4.1. Машинно-ориентированные языки
- •1.4.2. Машинно-независимые языки
- •1.5. Структура программного обеспечения
- •1.5.1. Системы программирования
- •1.5.2. Операционные системы
- •Раздел 2. ОСНОВЫ АЛГОРИТМИЗАЦИИ
- •2.1. Алгоритм и его свойства
- •2.2. Способы описания алгоритмов
- •2.2.1. Словесное описание
- •2.2.2. Графическое описание
- •2.2.3. Запись на алгоритмическом языке
- •2.3. Разновидности структур алгоритмов
- •2.3.1. Линейный вычислительный процесс
- •2.3.2. Разветвляющийся вычислительный процесс
- •2.3.3. Циклический вычислительный процесс
- •Раздел 3. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
- •3.1. Теория структурного программирования
- •3.2. Реализация структурного проектирования в современных языках программирования
- •3.3. Преобразование неструктурированных программ в структурированные
- •3.3.2. Метод введения переменной состояния
- •3.3.3. Метод булевого признака
- •3.4. Способы графического представления структурированных схем алгоритмов
- •3.4.1. Метод Дамке
- •3.4.2. Схемы Насси-Шнейдермана
- •Раздел 4. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ПРОГРАММИРОВАНИЯ ПАСКАЛЬ
- •4.1. Общая характеристика языка Паскаль
- •4.2. Алфавит языка Паскаль
- •4.3. Основные понятия языка
- •4.3.1. Идентификаторы
- •4.3.2. Комментарии
- •4.4. Структура простейшей программы
- •4.5. Способы описания синтаксиса
- •4.5.2. Синтаксические диаграммы
- •Раздел 5. ОСНОВНЫЕ ТИПЫ ДАННЫХ
- •5.1. Классификация данных
- •5.2. Стандартные скалярные типы данных
- •5.2.1. Целочисленные типы
- •Формат
- •5.2.2. Вещественные типы
- •Функция
- •5.2.3. Символьный тип (тип Char)
- •5.2.4. Логический тип (тип Boolean)
- •Функция
- •5.3. Выражения
- •5.4. Оператор присваивания
- •Раздел 6. СТРУКТУРА ПРОГРАММЫ
- •6.1. Программный модуль
- •6.2. Раздел меток
- •6.3. Раздел констант
- •6.4. Раздел типов
- •6.5. Раздел переменных
- •6.6. Раздел операторов
- •Раздел 7. ОПЕРАТОРЫ
- •7.1. Составной оператор
- •7.2. Программирование линейных и разветвляющихся структур алгоритмов
- •7.2.1. Оператор перехода Goto
- •7.2.2. Условный оператор If
- •7.2.3. Оператор варианта (выбора) Case
- •7.2.4. Пустой оператор
- •7.3. Программирование циклических структур алгоритмов
- •7.3.1. Оператор цикла с параметром (оператор For)
- •7.3.2. Оператор цикла с постусловием
- •7.3.3. Оператор цикла с предусловием
- •7.3.4. Операторы Continue и Leave
- •Раздел 8. СТРУКТУРИРОВАНИЕ И ОФОРМЛЕНИЕ ПРОГРАММ
- •Раздел 9. ОПИСАННЫЕ СКАЛЯРНЫЕ ТИПЫ
- •9.1. Перечислимый скалярный тип
- •9.2. Тип диапазон
- •10.1. Массивы
- •10.1.1. Задание массивов
- •10.1.2. Действия над элементами массивов
- •10.1.3. Действия над массивами
- •10.1.4. Типизованные константы типа массив
- •10.2. Строковые данные
- •10.2.1. Строковые константы
- •10.2.2. Строковые переменные
- •10.2.3. Встроенные функции, определенные над данными типа String
- •ЛИТЕРАТУРА
Имя Output имеет системный файл, используемый для вывода результатов вычислений. Обычно отображается на дисплей.
Затем в рассматриваемой программе выполняются операторы присваивания, в которых выполняются собственно вычисления (в p заносится полупериметр треугольника, в s – площадь треугольника; sqrt – встроенная функция вычисления квадратного корня).
После этого осуществляется вывод результатов вычислений с помощью стандартной процедуры
Writeln (s)
Признаком конца тела программы является точка.
4.5. Способы описания синтаксиса
Синтаксис – это набор правил и соглашений, описывающих правильные предложения языка. Для записи правил синтаксиса языков программирования применяют различные формализованные системы обозначений, называемые
метаязыками.
Мы рассмотрим два метаязыка, широко используемых для описания синтаксиса языка Паскаль:
1)язык металингвистических формул. Одна из его разновидностей – это расширенная форма Бэкуса-Наура (РБНФ);
2)синтаксические диаграммы.
4.5.1.Расширенная форма Бэкуса-Наура (РБНФ)
В метаязыках, описывающих синтаксис языка программирования, используются следующие понятия: метапеременная, метаконстанта, синтаксическая единица и метасимвол.
Метапеременная – это определенная синтаксисом конструкция языка (исключая основные символы). Для записи метапеременных используются последовательности слов русского языка и служебных слов, между которыми находится символ подчеркивания.
Метапеременные при записи заключаются в угловые скобки. Примеры записи метапеременных:
<Шестн._цифра> <Оператор_While>
91
<Объявление_переменных>
Метаконстанта – это лексема языка программирования. В программе метаконстанте соответствует она сама.
В РБНФ метаконстанты заключаются в кавычки. Примеры метаконстант:
“End” “+” “For”
Синтаксическая единица – это строка, описывающая состав и порядок следования элементов конструкций языка программирования. Синтаксическая единица состоит из метапеременных, метаконстант и метасимволов.
Метапеременная в синтаксической диаграмме означает, что соответствующий фрагмент диаграммы должен быть детализирован подстановкой синтаксической диаграммы с именем, соответствующим данной метапеременной.
Метасимволы – специальные символы, используемые в метаязыках для
описания синтаксиса языков программирования. |
|
|
|
|
|||||
В РБНФ используется следующий набор метасимволов; |
|
|
|||||||
а) |
= |
(или ::=) имеет смысл «определяется как», «по определению |
|||||||
|
|
есть»; справа от знака ::= записывается синтаксическая единица, |
|||||||
б) . |
слева – метапеременная; |
|
|
|
|
|
|||
точка; обозначает конец определения; |
|
|
|
|
|||||
в) |
| |
вертикальная черта; обозначает выбор, альтернативу (смысл |
|||||||
|
{ } |
эквивалентен словам «либо», «или»); |
|
|
|
|
|||
г) |
фигурные |
|
скобки; |
означают |
возможность |
повторения |
|||
|
|
заключенной в них конструкции ноль, один или более раз; |
|||||||
|
[ ] |
например, {<Тело цикла>}; |
|
|
|
|
|||
д) |
квадратные |
скобки; |
обозначают |
|
необязательную |
часть |
|||
|
|
конструкции, т.е. возможность повторения заключенной в них |
|||||||
|
|
конструкции ноль или ровно один раз; например, запись [“+”] |
|||||||
|
( | ) |
означает, что знак + перед числом может писаться или нет; |
|
||||||
е) |
круглые скобки вместе с используемой внутри них вертикальной |
||||||||
|
|
чертой; |
означают |
альтернативы |
внутри |
определения, |
заключенного в скобки; например, запись (“X”|“Y”|...|“Z”) означает вхождение в конструкцию элемента “X” или “Y” или ...
“Z”.
Рассмотрим простейшие примеры записи в РБНФ.
92
Пример 4.2.
Вспомним, что идентификатор – по определению – последовательность латинских букв, цифр и знаков подчеркивания, начинающаяся с буквы или символа подчеркивания.
В РБНФ это определение может быть представлено так:
<Идентификатор> ::= (<Буква> | <Знак_подчеркивания>){<Буква> | <Цифра> | <Знак_подчеркивания>}.
<Буква> ::=
“a” | “b” | “c” | “d” | “e” | “f” | “g” | “h” | “i” | “j” | “k” | “l” | “m” | “n” | “o” | “p” | “q” | “r” | “s” | “t” | “u” | “v” | “w” | “x” | “y” | “z” | “A” | “B” | “C” | “D” | “E” | “F” | “G” | “H” | “I” | “J” | “K” | “L” | “M” | “N” | “O” | “P” | “Q” | “R” | “S” | “T” | “U” | “V” | “W” | “X” | “Y” | “Z”.
<Цифра> ::= “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”.
<Знак_подчеркивания> ::= “_”.
Пример 4.3.
Запись в РБНФ синтаксиса комментария.
<Комментарий> ::= “{”{<Любой_символ_кроме_символов_{_}>}“}”.
Здесь: |
|
|
|
внутренние { } − |
часть метапеременной; |
|
|
средние { } − |
метасимволы, означающие любое количество |
||
наружние “{” “}” − |
повторений заключенной в них метапеременной; |
||
основные символы языка Паскаль (метаконстанты), |
|||
|
относящиеся к его алфавиту; они заключены в РБНФ |
||
|
в кавычки, чтобы отличить их от метасимволов. |
||
Если учесть, что |
альтернативой символам |
{ } |
в ограничении |
комментария являются |
(* *) , то запись в РБНФ синтаксиса комментария |
||
будет иметь вид: |
|
|
|
<Комментарий> ::=
(“{” | “(*”) {<Любой_символ_кроме_символов_{_}_(*_*)>}( “}” | “*)”).
93
4.5.2. Синтаксические диаграммы
Синтаксическая диаграмма графически изображает структуру синтаксической единицы.
Каждая синтаксическая диаграмма имеет имя, в качестве которого используется соответствующая метапеременная.
Синтаксическая диаграмма представляет собой ориентированный граф с размеченными ребрами. Для разметки ребер используются метапеременные и метаконстанты. Метасимволы на синтаксической диаграмме не используются. Поэтому метаконстанты в синтаксических диаграммах в кавычки не заключаются.
Метапеременные заключаются в угловые скобки < >.
Для отделения имени синтаксической диаграммы от графа используется метасимвол ::=.
Символы < > и ::= являются единственными используемыми метасимволами.
Метапеременная на размеченном ребре графа означает, что соответствующий фрагмент диаграммы должен быть детализирован подстановкой синтаксической диаграммы с именем, соответствующим данной метапеременной.
Ниже рассмотрено представление в виде ориентированных графов некоторых из метасимволов языка РБНФ.
1) Выбору, альтернативе (метасимволу | (Или)) соответствует разветвление в синтаксической диаграмме с последующим объединением.
Например, переменная может принимать значение А или В (А, В – это лексемы языка Паскаль, т.е. метаконстанты).
В виде синтаксической диаграммы это запишется так, как представляет рисунок 4.2.
<Переменная> ::=
А
В
Рисунок 4.2 – Синтаксическая диаграмма, представляющая выбор
В РБНФ это будет записано так:
<Переменная> ::= “A”|”B”.
94
В данном случае <Переменная> - это имя синтаксической диаграммы. Вход синтаксической диаграммы находится слева, выход – справа. Стрелки указывают возможных преемников каждого из элементов диаграммы. Основное направление ребер графа – слева направо и сверху вниз.
2) Необязательной части конструкции (повторению ноль или один раз,
т.е. метасимволам [ ]) соответствует диаграмма, которую представляет рисунок
4.3.
<Переменная>
Рисунок 4.3 – Синтаксическая диаграмма, представляющая необязательную часть конструкции
Это соответствует записи в РБНФ:
[<Переменная>].
3) Возможности повторения конструкций ноль, один или более раз
(метасимволам { }) соответствует фрагмент синтаксической диаграммы, который представляет рисунок 4.4.
<Переменная>
Рисунок 4.4 – Синтаксическая диаграмма, представляющая возможность повторения конструкций <Переменная>
ноль, один или более раз
Это соответствует записи в РБНФ:
{<Переменная>}.
95
Пример 4.4.
Синтаксическая диаграмма определения «Идентификатор» (идентификатор – это последовательность букв, цифр и знаков подчеркивания, начинающаяся буквой или знаком подчеркивания).
Данное определение, представленное в виде синтаксической диаграммы, иллюстрирует рисунок 4.5.
<Идентификатор> ::=
<Буква> <Цифра>
<Знак_подчеркивания> |
<Буква> |
<Знак_подчеркивания>
Рисунок 4.5 – Синтаксическая диаграмма определения «Идентификатор»
Если сравнивать между собой язык РБНФ и синтаксические диаграммы, то можно сделать следующие выводы.
Язык РБНФ более строг и точен, более удобен для представления синтаксиса в памяти машины, более компактен.
Синтаксические диаграммы более наглядны и просты для понимания, но более громоздки.
96