Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика часть 1.pdf
Скачиваний:
16
Добавлен:
02.05.2015
Размер:
489.96 Кб
Скачать

лексемами. Синтаксические диаграммы языка показаны на рис.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