Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
теория.pdf
Скачиваний:
465
Добавлен:
11.05.2015
Размер:
1.15 Mб
Скачать

Имя 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]