Языки программирования и методы трансляции Лекция 3. Описание языка программирования
Языковой процессор – компонент системы программирования (компилятор или часть интерпретатора) Метаязык – язык для описания другого языка. Лексика – множество основных символов языка. Функции языкового процессора: – контроль соответствия исходного текста программы описанию языка программирования (при лексическом и синтаксическом анализе) – перевод лексически и синтаксически правильной программы с языка программирования в код, который может быть выполнен на физическом или виртуальном процессоре Синтаксис языка Средства описания синтаксиса ЯП: программирования – – форма Бэкуса-Наура; правила составления корректных программ как – синтаксические диаграммы Вирта; – формальные грамматики. цепочек, состоящих из основных символов ЯП.
Форма Бэкуса-Наура Металингвистическая форма – определение одного понятия языка. Левая часть – определяемое понятие (металингвистическая переменная). Каждая МЛП заключается в угловые метаскобки, например, <целое число> Левая часть отделяется от правой метасимволом : : = (по определению есть) Правая часть – все варианты определения, разделяемые метасвязкой |(или) Терминальный символ – элемент множества основных символов ЯП. Нетерминальный символ – то же, что и металингвистическая переменная. Пример: <целое число> : : =<целое без знака>| +<целое без знака> | -<целое без знака>: : =<цифра>|<целое без знака> <цифра>: : = 0|1|2|3|4|5|6|7|8|9
Синтаксические диаграммы Вирта Обозначения: - терминальный символ - нетерминальный символ (металингвистическая переменная) - порядок сочетания терминальных и нетерминальных символов Пример: Целое число + - 0 1 2 3 4 5 6 7 8 9
Контекстные условия (статическая семантика) 1. Правила единственности именования различных объектов программы. Например: - Фортран: пространства имен различных объектов не должны пересекаться; - Паскаль: пространства имен могут пересекаться. 2. Необходимость описания имени до его использования. 3. Условия соответствия типов операндов. 4. Количественные ограничения.
Описание динамической семантики -Грамматические модели (грамматика Вейнгаардена) -Операционная семантика (описание изменения состояния процессора) -Аксиоматическая семантика (пред- и постусловия) -Денотационная семантика (определение математического объекта и функции, отображающей экземпляры металингвистической переменной в экземпляры этого объекта) Пример использования денотационной семантики: <двоичное число>: : = 0 // положить равным нулю |1 // положить равным единице | <двоичное число> 0 // умножить на 2 | <двоичное число> 1 // умножить на 2 и прибавить 1