- •Текстовый редактор
- •Прогон и отладка программы
- •Справочная служба Турбо Паскаля
- •Строка
- •Строка
- •Задание 2. Разветвления
- •Простейшие циклы
- •Вложенные циклы
- •Примечания
- •Строка
- •Процедуры и функции
- •Процедуры ввода
- •Обозначение
- •Представим определение языка Показушка в расширенной форме Бэкуса-Наура
- •Предложение
- •Синтаксис Паскаля
- •Задание 14
- •Операторы Паскаля
- •Задание 15
- •Новые типы данных. Определение типа. Диапазоны.
лексемами. Синтаксические диаграммы языка показаны на рис.1. Каждая диаграмма определяет синтаксический класс.
Чтобы построить отрывок текста по синтаксической диаграмме, нужно проделать следующее:
1.Двигаясь слева на право, пройти по линиям диаграммы от начала до конца, помещая в текст все встретившиеся элементы. Какой бы путь не был выбран на диаграмме, порожденный фрагмент текста будет синтаксически правильным.
2.Когда в названии упомянуто название другого синтаксического класса, вместо него можно подставить любой фрагмент, построенный по соответствующей
синтаксической диаграмме.
Пользуясь синтаксической диаграммой, можно получить следующие конструкции:
КОШКА .
БЕЛАЯ, ЧЕРНАЯ, ТОЩАЯ, УПИТАННАЯ КОШКА .
Все эти предложения синтаксически правильные в Показушке. Заметим, что следование синтаксическим правилам не гарантирует получения осмысленных выражений.
Для описания синтаксиса вместо синтаксических диаграмм довольно часто в документации по языкам программирования используется особые обозначения, называемые расширенные Бэкуса-Наура (РБНФ) Формы. РБНФ – это язык для определения других языков. Синтаксические конструкции обозначаются английскими словами (метаименами), напечатанными курсивом. Каждое правило РБНФ определяет метаимя с помощью РБНФ – выражения, состоящего из одной или более альтернатив (фраз), разделенных вертикальной чертой ( | ). Фраза состоит из нуля или более элементов. Элемент – это или некоторое метаимя, или некоторая буквальная комбинация символов, заключенных в кавычки ( “ ”), или другое РБНФ-выражение, заключенное с двух сторон в фигурные, квадратные или круглые скобки. Фигурные скобки { } указывают на повторение (нуль или более вхождений),
квадратные скобки [ ] – на допустимость ( нуль или одно вхождение), а круглые скобки ( ) указывают на группирование (точно одно вхождение) выражений, в них заключенных. РБНФ – обозначения сведены в таблицу
Обозначение |
|
Смысл обозначения |
|
|
= |
Определяется как |
|
|
|
. |
Конец определения |
|
|
|
| |
Выбор или альтернатива |
|
|
|
“x” |
Лексема x |
|
|
|
X |
Фрагмент |
текста, |
относящийся |
к |
|
синтаксическому классу x |
|
|
|
{x} |
Отсутствие x или одно или больше вхождений x |
|||
|
(возможность повторения, что соответствует |
|||
|
замкнутому циклу в синтаксической диаграмме) |
|||
[x] |
Отсутствие |
x или ровно |
одно вхождение |
x. |
|
(необязательная часть синтаксического класса) |
|
||
(x | y | …| z) |
Вхождение x, или y, или … или z (альтернативы |
|||
|
внутри определения) |
|
|
Представим определение языка Показушка в расширенной форме Бэкуса-Наура
Предложение |
= |
Подлежащее предикат “.” . |
Подлежащее |
= |
Именная_группа . |
Предикат |
= |
Глагол ( именная_группа | наречие ) . |
Именная_группа |
= |
[ список_прилагательных ] . |
|
|
существительное . |
Список_прилагатель |
= |
Прилагательное { “,” |
ных |
|
прилагательное} . |
Существительное |
= |
“КОШКА”|”МЫШКА” |
Прилагательное |
= |
“ЧЕРНАЯ”|”ЬЕЛАЯ”|”ТОЩАЯ”| |
|
|
”УПИТАННАЯ” . |
50
Глагол = “БЕЖИТ”|”ЕСТ” . Наречие = “БЫСТРО”|”МЕДЛЕННО” .
Синтаксическим анализом называется процесс выяснения принадлежности конкретного фрагмента текста данному синтаксическому классу. Одним из методов его проведения является построение синтаксического дерева, который сводится к следующему.
1.Текст разбивается на последовательность лексем.
2.Разбирая текст слева на право, находится последовательность элементов, составляющую фрагмент текста, принадлежайший заданному синтаксическому классу, выполняя при необходимости дополнительный анализ в рамках основного. Последовательность, заменяемая на каждом этапе, должна быть максимально длинной из всех возможных. Если на каком-либо этапе требуемый элемент обнаружить не удается, значит текст не разобран, анализ был безуспешным.
Вкачестве примера выясним, будет ли предложение КОШКА ЕСТ МЫШКУ . синтаксически правильным в Показушке.
На первом этапе текст нужно расчленить, превратив в последовательность лексем. В показушке это тривиально
“КОШКА” “ЕСТ” “МЫШКУ” “.” .
Второй этап анализа состоит в том, чтобы пройти по тексту слева на право и найти последовательно составные части, образующие объект данного синтаксического класса. Так кал сейчас мы пытаемся доказать, что текст – это предложение, обратимся к синтаксической диаграмме предложение. Диаграмма показывает , что всякое предложение начинается с именной группы. Поэтому в начале текста мы должны найти именную группу.
Именная_группа – другой синтасический класс, поэтому в рамках основной процедуры анализа нужно произвести еще один разбор, чтобы найти именную группу. Согласно соответствующей синтаксической диаграмме, лексема “КОШКА” допустима в качестве именной группы. Поэтому мы возвращаемся к основной процедуре и заменяем первое слово в предложении названием класса именная_группа:
“КОШКА” |
“ЕСТ” |
“МЫШКУ” |
“.” |
Именная_группа |
“ЕСТ” |
“МЫШКУ” |
“.” |
Согласно синтаксической диаграмме, именная группа, найденная в начале предложения, заставляет непосредственно за нейискать лексемы «ЕСТ» или «БЕЖИТ». Это просто. Следующей в частично уже проанализированном тексте идет лексема «ЕСТ», что синтаксически правильно.
Затем мы должны найти либо другую именную группу, либо лексему «БЫСТРО», либо лексему «МЕДЛЕННО». Так как «МЫШКА» – действительно именная группа, наш анализ продолжается так:
“КОШКА” |
“ЕСТ” |
“МЫШКУ” |
“.” |
Именная_группа |
“ЕСТ” |
“МЫШКУ” |
“.” |
Именная_группа |
“ЕСТ” |
Именная_группа |
“.” |
Наконец, требуется найти лексему «.», и она в тексте обнаруживается. Итак, дойдя до правого конца синтаксической диаграммы и исчерпав весь текст, можем заключить, что данный фрагмент в примере является правильным предложением.
Существенно, что синтаксический анализ не является простым разглядыванием текста с целью отнесения его к какомунибудь из классов. Нужно знать, какой мы класс ищем, и определить, принадлежит ли текст этому классу.
51
С помощью РБНФ-определений синтаксический анализ выполняется почти так же. На каждом этапе последовательность лексем и названий синтаксических классов, удовлетворяющая правой части определения, заменяется в тексте названием синтаксического класса из левой части того же предложения. В общем случае язык, определенный с помощью РБНФ, содержит больше синтаксических классов, чем тот же язык, определенный синтаксической диаграмой. Это значит, что синтаксическое дерево бедет содержать больше уровней. Пример РБНФ-анализа
“КОШКА” |
“ЕСТ” |
|
“МЫШКУ” |
“.” |
существительное |
глагол |
|
существительное |
“.” |
Именная_группа |
глагол |
|
Именная_группа |
“.” |
подлежащее |
|
предикат |
“.” |
|
|
предложение |
|
Задание 12
С помощью РБНФ – определений ниже представлен крайне ограниченный язык, который называется Лепет
Предложение |
= |
подлежащее предикат “.” . |
Предикат |
= |
переходной_глагол дополнение | |
|
|
непереходной_глагол {наречие} . |
Подлежащие |
= |
“МАМА” | “БУБА” . |
Переходной_глагол |
= “КОРМИТ” | “КУПАЕТ” . |
|
Дополнение |
= |
“ПАПА” | ”БУБА” . |
Наречие |
= “МЕДЛЕННО” | ”БЫСТРО” . |
|
Непереходной_глагол |
= |
“ШАЛИТ” . |
Выполнить следующие задания
A.Начертите синтаксические диаграммы для синтаксических классов Предложение и предикат, включив в них определения других синтаксических классов.
B.Выпишите все предложения на Лепете, состоящие из двух слов.
C.Сколько предложений на Лепете состоят ровно из трех слов.
D.Определите с помощью синтаксического анализа и РБНФанализа, являются ли следующие предложения синтаксически правильными. Если предложение синтаксически неправильно, исправте его и повторите синтаксический анализ.
1)МАМА КОРМИТ БУБУ МЕДЛЕННО .
2)БЫСТРО МАМА КУПАЕТ БУБУ .
3)БУБА ШАЛИТ МЕДЛЕННО БЫСТРО .
4)МАМА МЕДЛЕННО КОРМИТ ПАПУ .
5)МАМА ШАЛИТ БУБУ .
6)БУБА КУПАЕТ ПАПУ .
7)МАМА КОРМИТ ПАПУ .
8)МАМА ШАЛИТ МЕДЛЕННО МЕДЛЕННО .
9)БУБА КУПАЕТ ПАПУ МЕДЛЕННО .
10)БУБА КОРМИТ БУБУ .
11)МАМА КУПАЕТ МАМУ .
12)МАМА ШАЛИТ БЫСТРО МЕДЛЕННО БЫСТРО .
13)ПАПА КУПАЕТ БУБУ .
14)БУБА КОРМИТ МАМУ .
15)БУБА КОРМИТ ПАПУ МЕДЛЕННО..
Задание 13
Составьте синтаксические диаграммы и РБНФ-выражения, с помощью которых можно правильно записать
1.Городской почтовый адрес.
2.Сельский почтовый адрес.
3.Фамилия имя отчество.
4.Военное звание в Российской армии.
5.Военное звание в царской армии.
6.Марка грузового автомобиля.
52