
- •8.1. Определение синтаксиса
- •8.1.1. Схема трансляции программы
- •8.2. Сравнение синтаксиса sml и ламбда-исчисления
- •8.2.1. Обозначения бнф
- •8.2.2. Синтаксис ламбда-исчисления
- •8.2.3. Синтаксис sml
- •9.1. Обобщенные требования к описанию языков программирования
- •9.2. Семантика языка программирования
- •9.3. Теория вычислений д. Скотта
- •9.3.1. Последовательность изложения теории вычислений д. Скотта
- •9.3.2. Определения способов комбинирования доменов
- •9.4. Формализация семантики языка функционального программирования sml
- •9.4.1. Порядок построения формальной модели семантики языка программирования sMalL согласно ранее представленному формальному описанию синтаксиса языка в терминах бнф
- •9.4.2. Вычислительная модель на основе состояний программы языка sMalL
- •9.5. Описание семантических предложений
- •9.5.1. Семантические предложения для выражений
- •9.5.2. Семантические предложения для команд
- •9.5.3. Семантические предложения для денотатов
Лекция 8. Синтаксис языков программирования
В лекции рассматриваются вопросы, относящиеся к понятийному аппарату, истории развития и выразительным возможностям синтаксического представления формальных теорий и языков программирования.
Формализуем основные конструкции языка программирования SML посредством форм Бэкуса-Наура или БНФ (история их создания изложена во вступительной лекции).
Неформально определим синтаксис (языка программирования или математической теории) как форму конструкций (программы или теории) и способов их комбинирования. Более точное определение синтаксиса будет сформулировано далее в ходе лекции.
8.1. Определение синтаксиса
Определение 8.1. Синтаксис - это раздел описания формального математического языка или языка программирования, исследующий вид, форму и структуру конструкций (без учета их значения или практической применимости).
Заметим, что значение конструкций языка программирования описывается и исследуется семантикой (о ней речь пойдет в следующей лекции), а вопросы и ценность практической применимости - прагматикой.
Основной задачей синтаксиса является определение формы и вида допустимых языковых конструкций. Эту задачу можно решить путем перечисления описаний всех языковых конструкций. Одним из механизмов такого описания является нотация БНФ.
Будем рассматривать параллельно БНФ-формализации синтаксиса ламбда-исчисления и языка программирования SML. В случае SML ограничимся базовым набором конструкций языка, подчеркнув такие существенные возможности, как кортежи (tuples) и let-выражения.
8.1.1. Схема трансляции программы
Для формирования правильного понимания роли и места синтаксиса в исследовании языков программирования рассмотрим обобщенную схему трансляции исходного текста программы (написанной, например, на языке программирования SML) в машинный код.
1. В ходе трансляции программы, прежде всего, выполняется так называемая процедура лексического анализа, которая включает в себя выделение в тексте программы элементарных конструкций языка, или, иначе, лексем (в частности, имен переменных или идентификаторов, специальных или ключевых слов, значений констант, переменных и др.).
2. По завершении лексического анализа выполняется так называемая процедура синтаксического разбора текста программы, которая представляет собой проверку корректности синтаксиса текста, написанного на языке программирования. Эта процедура может, включать выполнение проверки корректности типизации в той или иной форме.
3. Наконец, в случае, если все конструкции языка, присутствующие в тексте программы, являются синтаксически корректными, а также не выявлено несоответствий типов, запрещенных с точки зрения анализатора корректности типизации, производится преобразование текста программы в промежуточный код (ассемблер, код той или иной абстрактной машины) или собственно машинный код.
8.2. Сравнение синтаксиса sml и ламбда-исчисления
Рассмотрим синтаксис языка программирования SML в сравнении с синтаксисом ламбда-исчисления.
Для большей наглядности и сопоставимости формализаций синтаксиса обоих языков (языка формальной математической теории и языка программирования) будем использовать единую нотацию, а именно, БНФ.
8.2.1. Обозначения бнф
Рассмотрим традиционные обозначения БНФ и поясним смысл каждого из них.
Фактически БНФ представляют собой определения одних понятий через другие. При этом понятия заключаются в угловые скобки, и используется ряд специализированных символов и соглашений, суть которых поясняется далее.
Определяющий символ "::=" отделяет определяемую конструкцию от составляющих ее ранее определенных базовых конструкций.
Определяемая конструкция записывается слева от "::=" в угловых скобках "<" и ">".
Альтернативы (возможные варианты) конструкций перечисляются по вертикали.
Цитирование (подобно тому, как мы цитировали специальные символы, заключая их в двойные кавычки) не имеет обозначения.