Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзаменационные вопросы по дисциплине.docx
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
69 Кб
Скачать
☆

19. Процесс компилирования.

Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера).[2][3][4] Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код)

Виды компиляции[2]

  • Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.

  • Построчная. То же, что и интерпретация.

  • Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе директивами компилятора. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы.

Виды компиляторов[2]

  • Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором.

  • Гибкий. Сконструирован по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов.

  • Диалоговый. См.: диалоговый транслятор.

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

  • Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.

  • Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.

  • Отладочный. Устраняет отдельные виды синтаксических ошибок.

  • Резидентный. Постоянно находится в оперативной памяти и доступен для повторного использования многими задачами.

  • Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.

  • Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксическийи семантический загрузчики.

Процесс компиляции состоит из следующих этапов:

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

  2. Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.

  3. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.

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

  5. Генерация кода. Из промежуточного представления порождается код на целевом языке.

20. Структура программы в языке Паскаль.

{раздел описания программы}

program <название программы>;

uses <подключение библиотек и модулей>;

const <раздел описания констант>;

type <раздел описания типов>;

var <раздел описания переменных>;

label <раздел описания меток>;

<описание процедур и функций>

{раздел самой программы}

begin <признак начала программы>

<тело программы>

end.<признак конца программы>

21. Описание переменных программы в языке Паскаль.

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

var <раздел описания переменных>;

Var a:Integer;

    s,р:Char;

    Sinus:Real;

22,23,24,25. Типы данных используемые в Паскале. Целочисленный,вещественный, перечисляемый и интервальный, логический и символьный, строковый, и возможные операции с ними.

Простые типы данных Паскаля: числа с плавающей запятой (real), целые (integer), символьный (char), логический (boolean) и перечисления (конструктор нового типа, введённый в Паскале).

Целочисленные типы:

Тип

Диапазон

Формат

Размер в байтах

Byte

0..255

Беззнаковый

1

ShortInt

−128..127

Знаковый

1

SmallInt

−32768..32767

Знаковый

2

Word

0..65535

Беззнаковый

2

Integer

-32768..32767

Знаковый

2

Cardinal

=LongWord

Беззнаковый

4

LongWord

0..4294967295

Беззнаковый

4

LongInt

−2147483648..2147483647

Знаковый

4

Int64

−9223372036854775808..9223372036854775807

Знаковый

8

QWord

0..18446744073709551615

Беззнаковый

8

Числа с плавающей запятой:

Тип

Диапазон

количество значащих цифр

Размер в байтах

Real/Double

зависит от платформы

 ???

8

Real48

 ???

11-12

6

Single

1.5E-45..3.4E38

7-8

4

Extended

1.9E-4932..1.1E4932

19-20

10

Comp

−2E64+1..2E63-1

19-20

8

Currency

−922337203685477.5808..922337203685477.5807

19-20

8

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

В процессе создания программы у нас может появиться необходимость объединить в одну группу по какому-либу признаку совокупность значений перечисляемого типа. К примеру, перечисляемый тип ZnakZodiaka (Знак зодиака) включает скалярные значения Oven, Strelec, Kozerog, Bliznecy, Vesy (Овен, Стрелец, Козерог, Близнецы, Весы); перечисляемый тип Planeta (Планета) объединяет скалярные значения Mercury, Venera, Earth, Mars (Меркурий, Венера, Земля, Марс).

type

      ZnakZodiaka=(Oven,Strelec,Kozerog,Bliznecy,Vesy);

Описание переменных скалярного типа, объявленные в разделе type, производится при помощи имен типов:

type 

      Planeta = (Mercury,Venera,Earth,Mars);

var

      Solnsystem: Planeta;     

2)  Интервальный тип данных.  

Диапазон значений, имеющих любой порядковый тип, определяется как интервальный тип данных. Отрезок устанавливается в диапазоне от минимального значения констант до максимального, которые отделяются друг от друга двоеточием "..". Константами могут выступать константы целого, символьного, логического или перечисляемого типа. Базовым типом называют скалярный тип, на котором задается отрезок.

Примеры диапазонов:

1) type 

           diap=0..255;

2) type

           bukv='A'..'Z';

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

Данные логического типа могут принимать только два значения , которые обозначаются в программах как true и false , при этом считается , что true > false. Размер памяти для размещения значения логического типа определяется в один байт. При описании величин этого типа указывают boolean. Рассмотрим примеры объявления логических данных в разделе объявлений программы.

const a=true;

var b:boolean;

Для данных логического типа определены следующие логические операции.

NOT - отрицание NOT(True)=false; OR - логическое сложение (ИЛИ) True OR False = True; AND - логическое умножение(И) False AND True = False; XOR - исключающее ИЛИ True XOR True = False; True XOR False = True;

Символьный (литерный) и строковый типы представляют данные, являющиеся символами и их последовательностями - строками.

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

Значение символьного типа занимает один байт и изображается в программах с помощью апострофов, например: 'f' 'A' '='.

В памяти компьютера символы хранятся в виде их упорядоченных числовых кодов. Отсюда 'a'<'b' - истинна.

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

Так как каждый символ имеет свой уникальный код, то допускается использовать значение символьного типа посредством задания его целочисленного кода, например: #128 (буква 'A') #66 (буква 'B') #50 (цифра '2').