2. Элементы яп
Элементы ЯП могут рассматриваться на разных уровнях: с точки зрения 1) алфавита, 2) лексики, 3) синтаксиса и 4) семантики конструкций ЯП.
1. Алфавит – совокупность символов, используемых для записи конструкций данного языка.
2. Лексика – совокупность правил образования цепочек символов (лексем), из которых образуются идентификаторы (имена переменных и меток), операторы, операции и другие лексические компоненты языка. Сюда же включаются зарезервированные слова, предназначенные для обозначения операторов, встроенных функций и т.п.
3. Синтаксис – совокупность правил образования языковых конструкций (предложений) ЯП – блоков, процедур, составных операторов, условных операторов, операторов цикла и т.п. Особенностью синтаксиса некоторых ЯП является рекурсивность – принцип вложенности правил построения конструкций , т.е. элемент синтаксиса языка в своем определении прямо или косвенно в одной из своих частей может содержать сам себя. Например, в определении оператора цикла телом цикла является оператор, который также может являться оператором цикла.
4. Семантика – смысловое содержание конструкций языка. Семантическим анализом называют проверку смысловой правильности конструкций. Примером семантической ошибки в классических процедурных ЯП является случай, когда в программе делается попытка присвоить переменной значение не подходящего типа (несоответствующего тому типу, которым она была описана).
3. Способы описания яп
Наиболее известными являются 2 способа описания ЯП:
1) нотация Бэкуса (впервые была применена для языка Algol),
2) нотация IBM (впервые была применена для языка Cobol).
1. Нотация Бэкуса используется для описания такого известного классического ЯП как Pascal. Согласно этой нотации описание конструкций языка состоит из левой и правой частей между которыми ставится символ ::=, который можно трактовать как «по определению есть». В левой части определения записывается название определяемого понятия, взятое в угловые скобки < >. Правая часть включает совокупность элементов, соединенных вертикальной чертой |, которая трактуется как «или» и объединяет альтернативы – различные варианты значения определяемого элемента (понятия). Многие элементы носят рекурсивный характер, т.е. в правой части описания может содержаться левая часть как самостоятельный элемент.
Пример1. Определение оператора присваивания на языке Pascal :
<Оператор присваивания>::=<Переменная>:=<Выражение>
Пример2. Определение идентификатора переменной на языке Pascal:
<Идентификатор> ::= <Буква>|<Идентиф-р><Буква>|<Идентиф-р><Цифра>
Данное определение содержит рекурсию и означает, что идентификатор (имя) переменной состоит из букв и цифр, но первым символом должна быть буква.
2. Нотация IBM используется для описания таких известных ЯП как Basic и С. Она включает в себя следующие конструкции:
< > – угловые скобки ( или двойные кавычки “ “) обозначают элементы программы, определяемые пользователем (<идентификатор>, <список параметров>, <условие> и пр.),
[ ] – квадратные скобки, ограничивающие конструкцию, обозначают возможность ее отсутствия,
| – вертикальная черта разделяет список значений обязательных элементов, одно из которых должно быть выбрано,
… – многоточие, следующее после конструкции, обозначает последовательность конструкций той же самой формы, что и предшествующая многоточию конструкция.
Рекурсивные определения в нотации IBM не используются.
Пример (определение описания процедуры-подпрограммы):
[Private | Public | Friend][Static] Sub <идентификатор>
[(<список параметров>)][<оператор>]
…
[Exit Sub]
[<оператор>]
…
End Sub
