Смекни!
smekni.com

Факультет вычислительной математики и кибернетики (стр. 1 из 15)

КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Факультет вычислительной математики и кибернетики

А.И. ЕНИКЕЕВ

ЯЗЫКИ ПРОГРАММИРОВАНИЯ И МЕТОДЫ ТРАНСЛЯЦИИ

КАЗАНЬ 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.1-1.Классификация программного обеспечения.

Система программирования определяется следующими составными частями : язык программирования ,транслятор и интегрированная среда разработки.

Язык программирования - это формальный язык , предназначенный для

описания (кодирования) алгоритмов решения различных задач.

Транслятор - это программа, которая переводит текст исходной программы в эквивалентную объектную программу. Если объектный язык представляет собой ассемблер или некоторый машинный язык, то транслятор называется компилятором.

Интегрированная среда разработки -это библиотека сервисных программ , предназначенных для автоматизации процессов разработки ,

программирования и отладки ( понятие интегрированной среды

разработки возникло с появлением объектно-ориентированного программирования , однако в том или ином виде это понятие

присутствует также в процедурно-ориентированных системах программирования ) .

2.2. Классификация языков программирования.

Существует много разных способов классификации языков

программирования. Традиционно все это сводится к следующему.

Универсальные и проблемно-ориентированные языки

программирования . Язык программирования относится к универсальным языкам , если он обеспечивает возможность программирования широкого спектра задач. В случае ориентации на решение специализированного класса задач , мы имеем дело с проблемно-ориентированными языками программирования .

Языки высокого и низкого уровня. К языкам низкого уровня относятся