Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 3 демо.doc
Скачиваний:
6
Добавлен:
06.11.2018
Размер:
109.57 Кб
Скачать

Средства определения языка

В отличие от естественных языков, ЯП, как и другие формальные языки, должны быть определены самым точным и недвусмысленным образом.

Для формального опре­деления языковых конструкций используют т.н. метаязыки (фор­маль­ные языки описания формальных языков).

Описание языка программирования на метаязыке – составная часть т.н. спецификаций транслятора ЯП.

Нужный уровень строгости, достигаемый формализмом метаязыка, необходим для его изучения.

(К сожалению, принятый во многих современных книгах по програм­ми­рованию уровень строгости изложения заимствован скорее из книг по кулинарии).

Язык формул Бэкуса-Наура

Каждый язык, в том числе и формальный, имеет свой понятийный аппарат (Слово, знак препинания, предложение, … - понятия (языковые конструкции), исполь­зу­е­мые для описания естественных языков).

Вместе с тем каждый язык использует и некоторый алфавит (буквы, знаки препинания, и т.д.) так, что текст в этом языке представляет собой последовательность элементов алфавита (лексем). В соответствии с этим мы будем пользоваться терминами Понятие языка и лексема.

Заметим, что сами эти термины представляют новый (третий) уровень абстракции в описании языка. Определим теперь язык Бэкуса-Наура.

Понятие языка - это (метаязыковое) имя определяемой языковой конст­рукции. Имя конструкции в определении языка играет роль символа, который назы­ва­ется метасимволом (нетерминальным символом).

Определяемый язык представлен в виде конечного набора метасимволов (метасловаря) языка.

Метасловарь пред­став­ляет понятийный аппарат языка программирования.

С формальной точки зрения мета­сло­варь удобно считать алфавитом нетерминальных символов (метаалфавитом)

Вместе с метаалфавитом ЯП определяется и лексический словарь ЯП – конечный набор лексем.

С формальной точки зрения лекси­чес­кий словарь также удобно считать алфавитом терминальных символов.

Лексема - это ато­ма­р­ный объект языка.

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

< 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 * q

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

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

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

Здесь - символ, означающий «пустое слово».

Алгебра, которую мы фак­ти­чес­ки определили, называется алгеброй регулярных языков.