2.2. Трансляция программ и сопутствующие процессы
С появления первых компьютеров программисты серьезно задумывались над проблемой кодирования компьютерных программ. Уже с конца 40-х годов стали появляться первые примитивные языки программирования высокого уровня. В них программист записывал решаемую задачу в виде математических формул, а затем, используя специальную таблицу, переводил символ за символом, преобразовывал эти формулы в двухлитерные коды. В дальнейшем специальная программа (впоследствии названная интерпретатором) превращала эти коды в двоичный машинный код. Первый компилятор был разработан Г. Хоппер в начале 50-х годов; он осуществлял функцию объединения команд и в ходе трансляции производил организацию подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня (в то время псевдокодов) в машинные команды. В дальнейшем компиляторы и интерпретаторы для языков Ассемблера стали развиваться и прочно вошли в практику компьютерного дела.
Идеи трансляции (перекодирования) одних символов в другие легли в основу создания различных языков программирования с соответствующими трансляторами - компиляторами и/или интерпретаторами. Отличие компиляторов от интерпретаторов заключается в процедуре трансляции текста в машинный код. Компилятор преобразует весь текст программы в последовательный набор машинных команд, который в дальнейшем отправляется на выполнение (пример компилятора с языка Паскаль). Интерпретатор же осуществляет трансляцию по принципу синхронного перевода. Каждая отдельная строка программного текста транслируется, а затем, после ее интерпретации, команды этой строки выполняются (пример языка Бейсик). Современные трансляторы с языков программирования высокого уровня, систем управления базами данных интегрируют в себе возможности и достоинства компиляторов и интерпретаторов, а в системы программирования добавляют различные сервисные утилиты по трансляции и отладке создаваемых программ.
Важнейшим элементом в развитии систем программирования выступили подпрограммы. Появление аппарата подпрограмм существенно облегчило процесс разработки системных и прикладных программ. Подпрограммы позволили формировать библиотеки из наиболее часто употребляемых в программах алгоритмов -процедур и функций. В системах программирования обязательно присутствуют стандартные (встроенные в систему) библиотеки подпрограмм. Например, в их число входят подпрограммы вычисления математических функций sin(х), cos(x), abs(х) и др.
В настоящее время распространены пользовательские и прикладные библиотеки подпрограмм. Их число увеличивается. Меняется структура библиотечных подпрограмм. В современных языках получили распространение модули (Unit), представляющие специализированные пакеты взаимосвязанных подпрограмм определенного предназначения, например по работе с клавиатурой, с графикой и пр. Развитие объектно-ориентированного программирования позволило создавать библиотеки объектов и подпрограмм с объектными типами данных (Object). Примером могут служить оболочки типа TurboVision.
Современная программа представляет набор команд, операторов и выражений, в которых имеются ссылки (прямые или косвенные) на различные подпрограммы из существующих в системе программирования библиотек, модулей, объектов. В этой связи исходный текст программы, как правило, занимает по объему места в памяти в несколько раз меньше, чем его оттранслированный вариант в машинных кодах. Как это происходит?
Рассмотрим один из вариантов трансляции программы с языка программирования Паскаль. Исходный текст программы решения квадратного уравнения представлен ниже:
program KvadUravn;
var А, В, С, D, XI, Х2: REAL;
begin
writeln;
writeln( 'введи А,В,С') ; read(A,B,C);
D:=B*B-4*A*C;
if D<0 then write('корней нет')
else begin
X1:=(-B+sqrt(D))/(2*A);
X2:=(-B-sqrt(D))/(2*A);
write('X1=', X1,' X2=', Х2);
end
end.
Предположив, что этот текст (по отношению к процессу трансляции выступающий как исходный модуль) сформирован одним из текстовых редакторов, попытаемся отправить его на выполнение. Прежде всего его необходимо перевести в машинный двоичный код (называемый абсолютным или загрузочным модулем). Для этого на первых этапах осуществляется трансляция (в данном случае, как это реализовано в системах программирования Паскаля, компиляция) исходного текста в машинный код (объектный модуль). Однако, объектный модуль не может быть использован для выполнения программы, поскольку в нем нет программ по выполнению процедур ввода (read) и вывода (write, writeln), а также вычисления функции извлечения квадратного корня (sqrt). В исходном тексте программы ссылки на указанные библиотечные подпрограммы отмечены знаком {*}.
Следующий шаг трансляции - компоновка - заключается в подключении к исходному объектному модулю объектных модулей соответствующих подпрограмм в места ссылок на них (исходные тексты этих подпрограмм в системе вовсе отсутствуют). Другими словами, на место процедуры Write помещается подпрограмма, осуществляющая процедуру вывода данных на экран дисплея. Таким образом после компоновки (или, иначе, редактирования связей link editor) возникает абсолютный модуль, намного превышающий по объему размер исходного текста программы, Он и является исполняемым компьютером после его запуска. Расширениями его файлового имени, как правило, являются .com или .ехе.
В силу того, что объектные модули не предназначены для непосредственного исполнения, в них обычно нет привязки составляющих их машинных команд к конкретному месту в ОЗУ. Адреса машинных слов бывают условными, что помогает компоновщику размещать объектные модули в свободных местах ОЗУ (заменяя условные адреса команд на конкретные).
Многие системы программирования дополнительно содержат промежуточные этапы трансляции. В этих системах на первом шаге предусмотрена трансляция исходного текста в макроассемблерный код, а затем в объектный модуль. Это связано с историей развития языков программирования, а также с тем, что многие подпрограммы удобнее писать на языке Ассемблера, и подключать их легче на этапе линко-вания ассемблерного модуля с ассемблерными библиотеками подпрограмм.
В современных системах программирования, например, Турбо-Паскаль, Турбо-Си весь этот сложный процесс трансляции с компоновкой подпрограмм скрыт от пользователя и осуществляется специальными компиляторами.
Коротко об отладчиках. Эти программы входят в современные системы программирования и предоставляют средства для просмотра и изменения значений переменных в ходе отладки программы, поиска ошибок и т.д. Использование отладчиков значительно облегчает процесс доводки больших программ.
Заметим, что описанный процесс трансляции характерен для компиляции. Последовательно реализованный интерпретатор объектного модуля фактически не создает. В этом его и недостаток, и достоинство (экономия машинной памяти). Впрочем, у современных ЭВМ, в том числе и персональных, проблема малого ОЗУ отходит на второй план, и интерпретация встречается все реже, так как эффективность этого процесса в целом значительно ниже.
Остается непонятным, как детально происходит трансляция. Пользователь может не уметь сам вручную оттранслировать программу (даже столь короткую, как вышеприведенная), но элементарное понимание этого сложного процесса необходимо.
На первом этапе транслятор производит синтаксический анализ исходной программы - проверяет, не нарушены ли формальные правила, содержащиеся в данном языке программирования. Например, в Паскале текст может встретиться либо внутри текстовой константы (т.е. в апострофах), либо внутри комментария. Если такой текст встретился в другом месте, то это явная ошибка. В системе программирования встроены описания всех синтаксически разрешенных конструкций, и транслятор их применяет к исходной программе. Для задания синтаксиса применяются формы Бэкуса-Наура и синтаксические диаграммы, о которых будет рассказано в следующей главе.
Первой фазой синтаксического анализа является лексический анализ. Он заключается в просмотре литер исходной программы и построении из них лексически допустимых единиц - идентификаторов, ключевых слов языка, чисел и т.д. Во второй фазе эти единицы уже рассматриваются как неделимые и проверяется допустимость их сочетания.
Даже если в синтаксическом смысле исходная программа верна, это не означает, что она имеет смысл в рамках данного языка программирования. На следующем этапе семантического анализа транслятор ищет ошибки такого рода: числа употребления слов BEGIN и END не совпадают; переменные не описаны (в языке, требующем обязательного явного описания переменных), т.е. текст программы непонятен (семантика - смысловая сторона языка).
Лишь после того, как в программе все синтаксически правильно и семантически понятно, транслятор переводит операторы программы в машинный код. Это отнюдь не означает, что в программе все благополучно - не исключены ошибки этапа исполнения (деление на ноль, выход за границу массива, переполнение разрядов и т.д.).
Различные фазы компиляции могут быть как последовательными, так и частично перекрывающимися во времени. В зависимости от способа реализации компилятор читает и обрабатывает исходный текст один или несколько раз, называясь соответственно однопроходным, двухпроходным и т.д.
Инструментальные языки и системы программирования. Эти средства служат для разработки новых программ. Компьютер "понимает" и может выполнять программы в машинном коде. Каждая команда при этом имеет вид последовательности нулей и единиц. Писать программы на машинном языке крайне неудобно. Поэтому программы разрабатываются на языке, понятном человеку (инструментальный язык или алгоритмический язык программирования), после чего, специальной программой, которая называется транслятором, текст программы переводится (транслируется) на машинный код.
- Информационные процессы
- Базовый уровень
- Системный уровень
- Служебный уровень
- Классификация служебных программных средств
- Прикладной уровень
- Эволюция операционных систем и основные идеи
- [Править] Пакетный режим
- [Править] Разделение времени и многозадачность
- [Править] Разделение полномочий
- [Править] Реальный масштаб времени
- [Править] Файловые системы и структуры
- Основные свойства и возможности Windows
- Элементы интерфейса Windows
- Рабочий стол
- Элементы управления окном
- Значок (пиктограмма)
- Приложение и документ
- Технические приемы работы в Windows
- Основные операции с меню
- Открытие и закрытие меню
- Перемещение в меню
- Выбор в меню
- Некоторые особенности структуры меню
- Горячие клавиши
- Функциональные клавиши и сочетания клавиш
- Значки инструментальных панелей
- Подгруппы пунктов меню
- Взаимоисключающие пункты
- Переключающие пункты
- Блокирование пунктов
- Запрос дополнительной информации
- Каскадное меню
- Вызов диалогового окна
- Дополнительные способы работы с меню
- Типы и формы окон в Windows
- Общая структура окна Windows
- Основные операции над окнами
- Способы открытия программного окна:
- Способы открытия окна документа:
- Способы закрытия окна:
- Способы свертывания окна:
- Способы восстановления окна:
- Способы развертывания окна:
- Способы изменения размеров окна:
- Способы изменения положения окна:
- Способы перемещения между окнами:
- Работа с диалоговыми окнами
- Способы активизации элементов управления в диалоговом окне
- Способы работы с кнопкой:
- Способы установки переключателя (выбор варианта):
- Способы включения и выключения флажка:
- Способы выбора из списка:
- Способы выбора из развертывающегося списка:
- Способы выбора страницы:
- Основные сочетания клавиш интерфейса операционной системы Windows
- Основные принципы работы с системой
- Файловая система и структура
- 1.2. Понятие файловой системы
- Иерархия каталогов
- Иерархическая система папок Windows
- Атрибуты файла
- 1. Выделение файлов и папок.
- 5. Копирование файлов и папок.
- 6. Переименование файлов и папок.
- 7. Удаление файлов и папок
- 8. Перемещение файлов и папок.
- 9. Определение свойств объектов с помощью контекстного меню, которое открывается правой кнопкой мыши.
- 10. Изменение формы представления объектов окна.
- § 2. Понятие о системе программирования
- 2.1. Основные функции и компоненты
- 2.2. Трансляция программ и сопутствующие процессы
- Трансляторы бывают двух типов:
- Служебный уровень
- Классификация служебных программных средств
- Утилиты используются для
- Типы утилит
- Утилиты
- [Править] Утилиты сервисного обслуживания (усо)
- [Править] Основные типы усо [править] Дефрагментаторы
- [Править] Утилиты по контролю ошибок и повреждений структуры разделов и smart-ревизоры
- [Править] Утилиты — редакторы мета-информации
- [Править] Утилиты системного менеджмента
- Использование программы Scandisk
- Дефрагментация диска
- Почему удаляются файлы?
- В каких случаях удаленные файлы можно восстановить?
- Какие удаленные файлы можно восстановить?
- С каких файловых систем можно восстановить удаленные файлы?
- Статья 1. Сфера действия настоящего Федерального закона
- Статья 2. Основные понятия, используемые в настоящем Федеральном законе
- Статья 3. Принципы правового регулирования отношений в сфере информации, информационных технологий и защиты информации
- Статья 4. Законодательство Российской Федерации об информации, информационных технологиях и о защите информации
- Статья 5. Информация как объект правовых отношений
- Статья 6. Обладатель информации
- Статья 7. Общедоступная информация
- Статья 8. Право на доступ к информации
- Статья 9. Ограничение доступа к информации
- Статья 10. Распространение информации или предоставление информации
- Статья 11. Документирование информации
- Статья 12. Государственное регулирование в сфере применения информационных технологий
- Статья 13. Информационные системы
- Статья 14. Государственные информационные системы
- Статья 15. Использование информационно-телекоммуникационных сетей
- Статья 16. Защита информации
- Статья 17. Ответственность за правонарушения в сфере информации, информационных технологий и защиты информации
- Статья 18. О признании утратившими силу отдельных законодательных актов (положений законодательных актов) Российской Федерации
- 4. Добавление и изменение графических объектов (векторных)
- Эффективная настройка документа
- Управляйте макетом — не позволяйте макету управлять вами
- Устранение неполадок — как остановить автоматическое изменение размера шрифта?
- Обсуждение параметров страницы
- Устранение неполадок — требуется показать в одной презентации слайды с книжной и альбомной ориентацией
- Советы по созданию эффективной презентации
- Советы по представлению эффективной презентации
- Общие сведения о шаблонах PowerPoint 2007
- Отличия шаблонов от шаблонов оформления
- Рекомендации по созданию шаблонов
- Создание шаблона PowerPoint
- Сохранение презентации в формате файла шаблона PowerPoint (potx)
- Системы пакетной обработки
- Многотерминальные системы — прообраз сети
- Первые глобальные компьютерные сети
- Первые локальные компьютерные сети
- Компьютерные сети сегодня
- Историческая справка – Развитие микрокомпьютерных технологий
- Виды компьютерных сетей. Локальные и территориально-распределенные сети.
- Наиболее распространенные требования к построению локальной сети
- Принцип построения локальных сетей
- 3.2.2. Структура и основные принципы построения сети Интернет
- Интернет-услуги
- Интернет-услуги - услуги, оказываемые пользователям: - в обеспечении доступа в глобальную сеть; - в разработке и сопровождении Интернет-ресурсов; - в разработке и размещении рекламы.
- Основы html Основные тэги Первое знакомство с тэгами
- Атрибуты тэгов
- Метки и гиперссылки
- Форматирование текста
- Изображения
- Как создаются таблицы?
- Атрибуты таблиц и их элементов
- Пример 1.
- Основные понятия
- Элементы форм
- Атрибуты форм
- Пример 2.
- "Неправильные" таблицы
- Основные понятия
- Элементы форм
- Атрибуты форм
- Структура фреймсодержащих документов
- Плавающие фреймы
- Динамическое создание плавающего фрейма
- Бегущие строки
- Структура гипертекстового документа.
- 3.3.2. Знакомство с программой FrontPage
- Окно прикладной программы FrontPage
- Создание Web-страниц в прикладной программе FrontPage
- Создание сайта в прикладной программе FrontPage
- 3.3.4. Создание сайта и страниц в FrontPage Планирование сайта
- Создание сайта с помощью приложения FrontPage
- Защита файла Adobe pdf
- О паролях и зашите документа