КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет вычислительной математики и кибернетики
А.И. ЕНИКЕЕВ
ЯЗЫКИ ПРОГРАММИРОВАНИЯ И МЕТОДЫ ТРАНСЛЯЦИИ
КАЗАНЬ 2005 год.
СОДЕРЖАНИЕ
ПРЕДИСЛОВИЕ……………………………………………………….. 4
1.ВВЕДЕНИЕ ……………………………………………………………5
2.Системы программирования. Классификация и методы
программирования………………………………………………………..
2.1.Основные понятия и определения.……………………………….
2.2. Классификация языков программирования.…………………...
2.3.Функциональные языки программирования .…………………...
2.3.1.Простейшие приемы программирования.
2.3.2.Обработка списков.
2.3.2.1. Операции над списками.
2.3.2.2. Примеры программ.
2.3.2.3. Дополнительные средства функционального
программирования.
2.4. Спецификация , верификация и синтез программ.Основные
понятия
2.5. Системы параллельного программирования.Теория
взаимодействующих процессов и ее использование
для спецификации и анализа параллельных процессов .
2.5.1. Следы процессов.
2.5.1.1. Конкатенация.
2.5.1.2. Префикс.
2.5.1.3. Операция "после".
2.5.1.4. Проекция .
2.5.1.5. Последовательная композиция .
2.5.1.6. Переименование .
2.5.2.Теория процессов.
2.5.2.1 . Операция присоединения символа .
2.5.2.2 . Альтернативная операция .
2.5.2.3. Начальное состояние процесса .
2.5.2.4. Операция "после".
2.5.2.5. Последовательная композиция .
2.5.2.6. Параллельная композиция.
2.5.2.7. Взаимодействие параллельных процессов.
2.5.3. Язык параллельного программирования OCCAM.
2.6. Объектно-ориентированное программирование.
2.6.1.Основные определения и принципы.
2.6.2. Visual FoxPro - пример объектно-ориентированной СУБД.
3.Теория и методы трансляции.
3.1. Определение языка.
3.1.1.Синтаксис .
3.1.2.Семантика .
3.2. Основные этапы компиляции.
3.3. Лексический анализ.
3.4. Синтаксический анализ.
3.4.1. Цель синтаксического анализа.
3.4.2. Нисходящий синтаксический анализ .
3.4.3. Восходящий синтаксический анализ .
3.4.4. Префиксная и постфиксная записи выражений.
3.5. Семантический анализ.
3.6.Этап синтеза .
3.6.1. Распределение памяти.
3.6.2. Генерация кода.
3.6.3. Оптимизация кода.
Л И Т Е Р АТ У Р А………………………………………………………..
ПРЕДИСЛОВИЕ .
Пособие предназначено для студентов и преподавателей , специализирующихся в области разработки и реализации систем программирования . Может также представлять интерес для специалистов в области разработки системного программного обеспечения .Цель пособия - дать концептуальное понимание систем программирования , принципов их разработки и реализации на основе гибкого сочетания математического базиса теории программирования
с практическими подходами . Особое внимание уделяется методам компиляции .
Пособие представляет сокращенный вариант лекционного курса
"ЯЗЫКИ ПРОГРАММИРОВАНИЯ И МЕТОДЫ ТРАНСЛЯЦИИ" , читаемого
для студентов факультета вычислительной математики и кибернетики
Казанского государственного университета в настоящее время автором
пособия.
1.ВВЕДЕНИЕ .
В начале 70-х годов идеологи применения математических моделей
в программировании Скотт и Стрэйчи (авторы целого ряда работ по
l-исчислению и денотационной семантике) , работавшие в то время
в Оксфордском университе Великобритании ,охарактеризовали в одной из своих публикаций текущее состояние разработок и исследований
по программному обеспечению следующим высказыванием.
… В настоящее время состояние , сложившееся в программировании, определяется достаточно большим разрывом между теорией и практикой . С одной стороны мы имеем достаточно изощренные средства математического моделирования , которые тем не менее
являются стерильными и совершенно непригодны для анализа и исследования практических разработок в области программирования .
С другой стороны имеется большое количество прагматически -
- ориентированных серых, громоздких и неуклюжих программных разработок , в которых отсутствует концептуальная целостность
и логическая взаимосвязь между составляющими частями . Поэтому главной задачей в этой связи является создание промежуточных теорий , которые сохраняя математическую строгость и лаконичность , позволили бы их использовать для предварительного анализа и исследования разрабатываемого программного продукта с целью получения эффективного и качественного результата .
Несмотря на то , что с тех пор прошло более 30 лет , ситуация в этом плане кардинально не изменилась. Революционные изменения в компьютерных технологиях и новых способах программирования , происшедшие за это время , наоборот еще более рельефнее высветили упомянутую выше проблему, правда на более высоком уровне развития.
Сложность и многообразие разрабатываемых программных средств ,
увеличившиеся с тех пор на порядки , обусловили еще большую актуальность этапа предварительных исследований на основе адекватного математического моделирования разрабатываемого программного продукта . Следует признать , что в последнее время
появилось достаточно много результатов в области теории программирования и многие теоретические результаты нашли свое применение в практике программирования ( это касается например разработки автоматизированных средств перевода с одних
естественных языков в другие , создания эффективных генераторов
компиляторов , практического использования теоретических результатов по синтезу программ для создания интеллектуальных генераторов программ в объектно-ориентированных средах программирования и т.п.).
Однако , с другой стороны , появившиеся в последнее десятиление
объектно-ориентированные системы программирования представляли
из себя продукт , основаный скорее на интуитивных аспектах программирования , нежели на теоретических . Несмотря на появление
языков моделирования для объектно -ориентированного подхода
( например UML - унифицированного языка моделирования ) , в настоящее время не существует теории , которая могла бы претендовать
на адекватное описание и анализ объектно-ориентированной среды программирования .
Поэтому методика изложения материала данного пособия основывается, насколько это возможно , на гибком сочетании теоретических аспектов программирования с прагматическими задачами.Кроме этого в пределах данного пособия ставится цель систематизировать полученные теоретические и практические результаты по системам программирования и методам реализации этих систем . Поэтому представляемый материал состоит из двух основных разделов . Первый посвящен классификации систем программирования с описанием различных методов программирования в разных системах . Во втором разделе предлагается материал по средствам реализации систем программирования , представленный теоретическими и практическими результатами по разработке компиляторов.
2.Системы программирования. Классификация и методы программирования.
2.1.Основные понятия и определения.
Системы программирования представляют одну из важнейших составляющих программного обеспечения компьютерных технологий.
Рис.2.1-1.Классификация программного обеспечения.
Система программирования определяется следующими составными частями : язык программирования ,транслятор и интегрированная среда разработки.
Язык программирования - это формальный язык , предназначенный для
описания (кодирования) алгоритмов решения различных задач.
Транслятор - это программа, которая переводит текст исходной программы в эквивалентную объектную программу. Если объектный язык представляет собой ассемблер или некоторый машинный язык, то транслятор называется компилятором.
Интегрированная среда разработки -это библиотека сервисных программ , предназначенных для автоматизации процессов разработки ,
программирования и отладки ( понятие интегрированной среды
разработки возникло с появлением объектно-ориентированного программирования , однако в том или ином виде это понятие
присутствует также в процедурно-ориентированных системах программирования ) .
2.2. Классификация языков программирования.
Существует много разных способов классификации языков
программирования. Традиционно все это сводится к следующему.
Универсальные и проблемно-ориентированные языки
программирования . Язык программирования относится к универсальным языкам , если он обеспечивает возможность программирования широкого спектра задач. В случае ориентации на решение специализированного класса задач , мы имеем дело с проблемно-ориентированными языками программирования .
Языки высокого и низкого уровня. К языкам низкого уровня относятся