4861

Общая схема работы компилятора С++. Назначение и функционирование редактора связей. Загрузчик

Лекция

Информатика, кибернетика и программирование

Общая схема работы компилятора С++. Назначение и функционирование редактора связей. Загрузчик. Для оптимизации процесса перевода программы с С++ на машинный язык процесс трансляции разбивают на два этапа: промежуточная трансляция в набор объектных м...

Русский

2012-11-28

52 KB

33 чел.

Общая схема работы компилятора С++. Назначение и функционирование редактора связей. Загрузчик.

Для оптимизации процесса перевода программы с С++ на машинный язык процесс трансляции разбивают на два этапа: промежуточная трансляция в набор объектных модулей – компиляция и связывание объектных модулей в исполняемый файл – компоновка. Соответственно, программы, реализующие эти два этапа, называют компилятором и компоновщиком или редактором связей. Поскольку, как правило, оба этих инструмента предоставляются их разработчиками в паре, то часто под компиляцией (сборкой) подразумевают целиком весь процесс обработки исходного кода на С++ с получением итогового результата в виде исполняемого файла.

Кроме того, непосредственно перед передачей компилятору, исходный код программы проходит предварительную обработку препроцессором. Назначение препроцессора – обеспечение возможности разбиения больших программ на несколько взаимосвязанных частей – модулей, раскрытие сокращений – макросов, обработка некоторых параметров конфигурации компилятора и т.п.

Процесс компиляции представляет собой последовательность фаз, каждая из который преобразует одно представление программы в другое.

Лексический анализ: эту часть компилятора выполняет сканер, который читает литеры программы (символы) на исходном языке и строит из них слова (лексемы) языка. Для каждой построенной лексемы анализатор строит токен вида <id, attrib>. id – имя токена, представляет собой внутренний идентификатор, используемый на следующем этапе компиляции – синтаксическом разборе, а значение attrib указывает на соответствующую этому токену запись в специальной таблице символов, построенной анализатором. Эта информация используется на дальнейших этапах компиляции.

Например, для выражения

a = b + c / 100;

лексический анализатор выделит следующие лексемы: <a>, <=>, <b>, <+>, <c>, </>, <100>. Пробелы и другие разделительные символы анализатором автоматически отбрасываются. Для лексем <a>, <b>, <c> (представляющих переменные) может быть сформирована таблица символов вида:

В результате лексического анализа исходное выражение будет представлено в виде последовательности токенов:

 <id, 1> <=> <id, 2> <+> <id, 3> </> <100>

Здесь токены <=>, <+>, </> представляют собой абстрактные символы для операций присваивания, сложения и деления соответственно.

Следующая фаза – синтаксический разбор. Здесь используются идентификаторы токенов для построения промежуточного древовидного представления программы, описывающего её грамматическую структуру. Чаще всего таким представлением является синтаксическое дерево, в котором каждый внутренний узел представляет операцию, а его дочерние узлы – аргументы этой операции. Синтаксическое дерево определяет порядок, в котором выполняются операции.

Далее выполняется этап семантического анализа, на котором используется построенное синтаксическое дерево и информация из таблицы символов для проверки исходной программы на смысловое соответствие с правилами языка. Важной частью семантического анализа является проверка типов, когда компилятор проверяет, имеет ли каждый оператор аргументы соответствующего типа, и выполняет приведение типов, если оно допустимо.

После этого компилятор генерирует явное машинное промежуточное представление исходной программы. Выполняется оптимизация промежуточного кода: удаление избыточных инструкций, упрощение кода с обязательным сохранением его семантики и т.п.

Финальной фазой компиляции является генерация кода – из промежуточного представления исходной программы порождается программа в машинном коде. Чаще всего, компиляторы С++ реализуют механизм раздельной компиляции, при котором модули исходной программы обрабатываются отдельно. Такой подход обладает рядом преимуществ: для крупных программ, исходный код которых представлен большим количеством файлов-модулей, при внесении небольших изменений в отдельно взятый файл удобно иметь возможность перекомпилировать только соответствующий ему объектный модуль (и все, непосредственно от него зависящие), не затрагивая остальные.

Результатом работы компилятора является машинное представление программы в виде набора объектных модулей. Такой машинный код ещё не может быть исполнен компьютером, поскольку он содержит ряд неразрешенных ссылок на объекты других модулей и библиотек. Разрешение таких ссылок берет на себя компоновщик. Если по каким-то причинам один из объектных модулей или требуемая библиотека не обнаружены, компоновщик сообщит об ошибке сборки. При успешном разрешении всех связей, на выходе компоновщик собирает готовый исполняемый файл.

Несмотря на то, что, по сути, программа представляет собой реализацию некоторого абстрактного алгоритма действий, любая программа неизбежно потребует выполнения операций, затрагивающих общие ресурсы компьютера, например, выделение памяти, чтение или запись файлов и т.п. Управление ресурсами компьютера обеспечивается операционной системой, поэтому собранная программа всегда ориентирована на работу в контексте определенной операционной системы. За запуск готовых программ в операционной системе отвечает загрузчик – специальный инструмент (как правило, являющийся частью системы), выполняющий подготовительную работу для возможности начала работы программы.

Загрузчик считывает данные из исполняемого файла, проверяет соответствие их определенному формату, при необходимости, загружает в память требуемые дополнительные библиотеки и связывает их с программой, и наконец, создает соответствующий образ процесса и вносит его в очередь на исполнение.


1

2

3

b

c

<=>

<id, 2>

<id, 3>

<+>

</>

<id, 1>

<60>

файл 1

файл 2

файл 3

файл 4

файл 5

                                        компилятор

редактор связей

объектный модуль 1

объектный модуль 2

объектный модуль 3

объектный модуль 4

объектный модуль 5

новый

объектный модуль 1

новый

объектный модуль 2

исполняемый файл


 

А также другие работы, которые могут Вас заинтересовать

31723. Мотивація учіння 27 KB
  Мотивація учіння Будьяка діяльність здійснюється під впливом певних спонукань які є рушієм активності її суб'єкта. Навчальна мотивація визначається специфічними для навчальної діяльності факторами: власне освітньою системою освітнім закладом; організацією навчального процесу; суб'єктивними особливостями тих хто навчається вік стать інтелектуальний розвиток здібності рівень домагань самооцінка взаємодія з іншими тощо; суб'єктивними особливостями педагога насамперед його ставленням до учня до власної справи; специфікою навчального...
31724. Загальна характеристика праці вчителя 28.5 KB
  Загальна характеристика праці вчителя На основі системного підходу до аналізу педагогічної діяльності Н. До структурних компонентів належать суб'єкт та об'єкт педагогічної взаємодії предмет їх спільної діяльності цілі навчання і засоби педагогічної комунікації. Функціональними компонентами педагогічної діяльності на думку Н. Конструктивний компонент розкриває особливості конструювання вчителем власної діяльності та діяльності учнів з урахуванням близьких урок заняття цикл занять цілей навчання і виховання.
31725. Специфіка педагогічного мислення 27.5 KB
  Специфіка педагогічного мислення Педагогічне завдання є структурною одиницею мислення вчителя. Основним компонентом практичного мислення вчителя в якому найяскравіше проявляється внутрішня єдність інтелектуальних емоційних та вольових якостей особистості є процес прийняття педагогічних рішень. Ще одна важлива особливість мислення вчителя полягає в тому що теоретичні знання при розв'язанні педагогічних завдань використовуються як правило у знятому вигляді автоматично скорочено згорнуто. Зумовлено це поперше загальною тенденцією до...
31726. Педагогічне спілкування 28 KB
  Педагогічне спілкування Прагнення до людського спілкування виступає своєрідним внутрішнім стимулом рушієм діяльності особистості. Педагогічне спілкування це система органічної соціальнопсихологічної дії учителявихователя і вихованця в усіх сферах діяльності що має певні педагогічні функції спрямоване на створення оптимальних соціальнопсихологічних умов активної та результативної життєдіяльності особистості. Оптимальним треба вважати таке спілкування педагога з вихованцями у процесі навчальновиховної роботи яке створює найбільш...
31727. Методи педагогічної психології 29 KB
  Недоліки цього методу: пасивність спостерігача фіксація тільки зовнішніх проявів певних дій і вчинків складність кількісної обробки одержаних даних. Позитивні сторони методу в його масовості швидкості одержання інформації легкої обробки даних можливості застосування математичних методів обробки даних і порівняльного аналізу декількох обстежень. Недоліки методу важко розраховувати на повні правильні точні відповіді неможливість втручання в сам процес анкетування немає гарантій недобросовісного заповнення анкет тощо. Позитивні...
31728. Історія розвитку педагогічної психології 28 KB
  Історія розвитку педагогічної психології Становлення багатьох галузей наукового знання являє собою гетерогенний і гетерохронний і більше того розірваний у часі процес. поклала початок розвитку педагогічної теорії і цілеспрямованої організації шкільного навчання. Ця праця можна розглядати і як першу передумову тривалого суперечливого становлення педагогічної психології протягом більш ніж 250 років бо тільки в кінці 19 в. Весь шлях становлення і розвитку педагогічної науки може бути представлений трьома великими періодами етапами: Перший...
31729. Суспільна роль вчителя, його значення в перебудові суспільства 28.5 KB
  Діяльність педагога вид соціально культурної діяльності спрямованої на передачу накопичених людством культури і досвіду від старших поколінь молодшим створення умов для їх всебічного гармонійного розвитку та підготовку до виконання певних соціальних ролей у суспільстві. Основою педагогічної діяльності є спільна діяльність людей у процесі якої кожен субєкт засвоює загальнолюдський досвід історично сформовані суспільні педагогічні комунікативні моральні та інші цінності знання і способи дій; формує себе як особистість. Метою...
31730. Вимоги педагогічної діяльності до особистості вчителя 27.5 KB
  Вимоги педагогічної діяльності до особистості вчителя Які ж особистісні якості необхідні для успішної педагогічної діяльності Ще Я. Перша така особливість це педагогічні здібності тобто наявність внутрішнього натхнення до цієї діяльності. За відсутності цієї чутливості він неспроможний досягти в цій діяльності значних успіхів. Здібності до педагогічної діяльності можна виявити шляхом визначення темпів опанування педагогом професійних педагогічних знань глибини оволодіння основними прийомами та способами педагогічної діяльності.