Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1_ОАП.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
141.82 Кб
Скачать

4.Формальные средства описания яп. Язык формул Бэкуса-Наура

Каждый язык, в том числе и формальный, имеет свой понятийный аппарат (Слово, знак препинания, предложение, … - понятия (языковые конструкции), исполь­зу­е­мые для описания естественных языков). Вместе с тем каждый язык использует и некоторый алфавит (буквы, знаки препинания, и т.д.) так, что текст в этом языке представляет собой последовательность элементов алфавита (лексем). В соответствии с этим мы будем пользоваться терминами Понятие языка и лексема. Заметим, что сами эти термины представляют новый (третий) уровень абстракции в описании языка. Определим теперь язык Бэкуса-Наура.

Понятие языка - это (метаязыковое) имя определяемой языковой конст­рукции. Имя конструкции в определении языка играет роль символа, который назы­ва­ется метасимволом (нетерминальным символом). Т.о. определяемый язык представлен в виде конечного набора метасимволов (метасловаря) языка. Метасловарь пред­став­ляет понятийный аппарат языка программирования. С формальной точки зрения мета­сло­варь удобно считать алфавитом нетерминальных символов (метаалфавитом) несмотря на то, что с содержательной точки зрения – это набор имен определяемых понятий языка.

Вместе с метаалфавитом ЯП определяется и лексический словарь ЯП – конечный набор лексем. Как и в случае со словарем метасимволов, с формальной точки зрения лекси­чес­кий словарь также удобно считать алфавитом терминальных символов, хотя с содержательной точки зрения лексемы могут быть и словами. Лексема - это ато­ма­р­ный объект языка.

Описание ЯП на языке формул Бэкуса – Наура (БНФ) – это набор

< N, T, R, >

где

Nалфавит нетерминальных символов

Tалфавит терминальных символов

Rконечный набор грамматических правил

 – символ “программа” {начальный нетерминальный символ}

Каждое грамматическое правило имеет вид p, где - элемент алфавита Т, p – слово в объединенном алфавите N T. Таким образом,

R = { 1 ::= p1 , 2 ::= p2 , . . . , k ::= pk }

Символ ::=, отделяющий левую часть правила (определяемый символ) от правой части (определения) означает «есть по определению».

Одно из правил в левой части должно содержать символ . Обычно это правило в списке указывается первым:

R = { p1 , 2 p2 , . . . , k pk }

Грамматическое правило, приведенное выше, описывается формулой    ;  . где  - символ понятия “программа”,  - символ понятия “заголовок”,  - символ понятия “блок”, а “ ; ” и “ . ” – лексемы. Для достижения семантической ясности формулы БНФ записывают в терминах метасловарей, заключая понятия языка в (остроугольные) скобки:

<программа> ::= <заголовок> ; <блок> .

Приведенное выше определение используется в процессе синтаксического анализа программ на ЯП. Блок синтаксического анализа компилятора представляет собой набор процедур анализа отдельных понятий, рекурсивно вызывающих друг друга. Например, оператор While описывается явно рекурсивной формулой

<Оператор> ::= While <Логическое выражение> do <Оператор>

Для того, чтобы использовать нерекурсивные способы описания синтаксических конструкций, в язык БНФ добавляют дополнительные средства в виде двуместных операций “*”, “|”, и одноместных операций “[ ]”, “{ }”. Их можно описать как сокращения исходных формул:

::= p и ::= q ::= p * p

::= p1 и ::= p2 ::= p1 | p2

::= p и ::= pq ::= p[q]

::= p и ::= ::= {p}

Здесь - символ, означающий «пустое слово». Заметим, что операция конкатенации «*» по существу использовалась ранее «по умолчанию». Алгебра, которую мы фак­ти­чес­ки определили, называется алгеброй регулярных языков.

Синтаксические диаграммы - наглядный способ построения конструкций языка программирования. Правила построения диаграмм поясним на примере

заголовок

программы

Языковое понятие, определяемое диаграммой, указано в начале диаграммы (в примере это -заголовок программы). Собственно диаграмма представляет собой особого рода схему, структура которой определяет синтаксически правильную языковую конструкцию.

В диаграмме выделены два вида объектов: терминальные символы или цепочки (лексемы) и языковые конструкции, определяемые другими (в частности, этой же) диаграммами (нетерминальные символы). Лексемы заключаются в овалы, а нетерминальные символы - в прямоугольники. Направление движения вдоль диаграммы (обхода) указывают стрелки, соединяющие объекты.

Описание языка программирования на языке синтаксических диаграмм представляет собой набор диаграмм, каждая из которых определяет одну из языковых конструкций (нетерминальных объектов). В синтаксически правильной программе все ее объекты удовлетворяют соответствующим диаграммам.

Синтаксические диаграммы использовались автором языка Паскаль Н. Виртом. Поэтому их традиционно применяют при изучении Паскаля. Наглядность языка синтаксических диаграмм имеет большое методическое значение.