- •Основная задача программирования
- •Однако Языки программирования нужно знать
- •2. Краткая история развития языков программирования
- •Средства определения языка
- •Язык формул Бэкуса-Наура
- •Описание яп на языке формул Бэкуса – Наура (бнф) – это набор
- •Синтаксические диаграммы
- •Язык программирования Паскаль
- •Алфавит языка
- •1.Латинские буквы (большие и маленькие), знак подчеркивания ’_’
- •2.Цифры 0,...,9
- •5.Скобки ( ) [ ] { }
- •Структура программы
Средства определения языка
В отличие от естественных языков, ЯП, как и другие формальные языки, должны быть определены самым точным и недвусмысленным образом.
Для формального определения языковых конструкций используют т.н. метаязыки (формальные языки описания формальных языков).
Описание языка программирования на метаязыке – составная часть т.н. спецификаций транслятора ЯП.
Нужный уровень строгости, достигаемый формализмом метаязыка, необходим для его изучения.
(К сожалению, принятый во многих современных книгах по программированию уровень строгости изложения заимствован скорее из книг по кулинарии).
Язык формул Бэкуса-Наура
Каждый язык, в том числе и формальный, имеет свой понятийный аппарат (Слово, знак препинания, предложение, … - понятия (языковые конструкции), используемые для описания естественных языков).
Вместе с тем каждый язык использует и некоторый алфавит (буквы, знаки препинания, и т.д.) так, что текст в этом языке представляет собой последовательность элементов алфавита (лексем). В соответствии с этим мы будем пользоваться терминами Понятие языка и лексема.
Заметим, что сами эти термины представляют новый (третий) уровень абстракции в описании языка. Определим теперь язык Бэкуса-Наура.
Понятие языка - это (метаязыковое) имя определяемой языковой конструкции. Имя конструкции в определении языка играет роль символа, который называется метасимволом (нетерминальным символом).
Определяемый язык представлен в виде конечного набора метасимволов (метасловаря) языка.
Метасловарь представляет понятийный аппарат языка программирования.
С формальной точки зрения метасловарь удобно считать алфавитом нетерминальных символов (метаалфавитом)
Вместе с метаалфавитом ЯП определяется и лексический словарь ЯП – конечный набор лексем.
С формальной точки зрения лексический словарь также удобно считать алфавитом терминальных символов.
Лексема - это атомарный объект языка.
Описание яп на языке формул Бэкуса – Наура (бнф) – это набор
< 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}
Здесь - символ, означающий «пустое слово».
Алгебра, которую мы фактически определили, называется алгеброй регулярных языков.