![](/user_photo/1549_7W_y5.jpg)
- •1 Общая модель компилятора. Блоки компилятора и их функции
- •2 Общее понятие синтаксиса и семантики языка. Бнф и др. Методы описания синтаксиса и семантики языка.
- •3 Понятие языка. Способы задания языка. Операции над языком
- •4 Регулярные выражения. Способы задания регулярных выражений. Операции над регулярными выражениями.
- •5.Конечные автоматы. Способы задания. Методы построения конечных автоматов. Преобразование конечных автоматов.
- •6 Лексический анализ. Методы и средства построения лексического анализатора.
- •7 Распознавание цепочек символов с помощью конечных автоматов.
- •8 Распознавание цепочек символов с помощью автоматов с магазинной памятью.
- •9 Грамматики языков. Классификация языков по Хомскому.
- •11 Методы представления грамматики в памяти.
- •12 Нисходящий синтаксический анализ. Метод рекурсивного разбора.
- •14 Нисходящий синтаксический анализ. Методы восстановления после ошибок.
- •16 Синтаксический анализ приоритета операторов. Функция приоритета
- •18 Slr-анализаторы. Построение таблиц для slr-анализатора.
- •19 Методы анализа ошибок. Восстановление после ошибок.
- •20 Семантика языка, методы описания и анализа.
- •21 Понятие атрибутивные грамматики
- •22 Синтаксически управляемая трансляция.
- •23 Таблица символов, таблица меток и др. Методы построения, доступа и анализа.
- •24 Генерация промежуточного кода.
- •25 Методы оптимизация промежуточного кода.
- •29 Имена, связывание, проверка типов.
- •30 Область видимости имен. Способы реализации.
- •31 Типы данных. Способы реализации.
- •32 Выражения и операторы присваивания. Способы реализации.
- •36. Абстрактные типы данных. Способы реализации.
- •37 Объектно-ориентированные языки программирования. Способы реализации.
- •38 Обработка исключительных ситуаций. Способы реализации.
- •39 Языки параллельного программирования. Способы реализации.
- •40 Императивные языки программирования. Способы реализации.
- •41 Функциональные языки программирования. Способы реализации.
- •42 Языки логического программирования. Способы реализации.
- •43 Графовые грамматики. Назначение и основные понятия.
- •44 Antlr. Tree grammars.
- •46 Case-средства. Назначение, классификация и основные понятия.
- •47 Case-средства. Направления интеллектуализации.
30 Область видимости имен. Способы реализации.
Статическая Динамическая
Одной из важнейших характеристик переменных является область видимости. Область видимости (scope) переменных программы — это ряд операторов, в которых переменная видима. Переменная является видимой (visible) в операторе, если к переменной, входящей в оператор, можно обратиться.
Большинство отдельных статических областей видимости в императивных языках связаны с определениями программных единиц. Во многих языках подпрограммы создают собственные области видимости.
В языках со статическим обзором данных объявления некоторых переменных могут быть скрыты от некоторых подпрограмм.
Динамические области видимости.Видна область или нет видно во время компиляции (зарание).Видимость определяется в период выполнения Динамический обзор данных (dynamic scoping) опирается на последовательность вызова подпрограмм, а не на их пространственную взаимосвязь. Область видимости можно определить только во время выполнения программы.
31 Типы данных. Способы реализации.
Числа :
Целочисленные Все целые числа представляются в компьютере в виде строки битов, причем один из битов (как правило, крайний слева) представляет знак. Целые типы данных поддерживаются аппаратным обеспечением.
Знаковые Отрицательные целые числа могут храниться в памяти в виде записи числа со знаком, в которой знаковый бит указывает на отрицательность числа, а остальные биты строки представляют абсолютное значение числа. Для хранения отрицательных чисел используется дополнительный код числа в двоичной системе, удобный для выполнения операций сложения и вычитания.
Вещественные Типы чисел с плавающей точкой (floating-point) моделируют действительные числа. В большинстве компьютеров числа с плавающей точкой хранятся в двоичных кодах.
Числа с плавающей точкой представляются в виде мантисс и показателей степени в форме, перенятой из научной записи. Большинство языков программирования содержит два типа чисел с плавающей точкой, часто называемых float и double. Переменные типа float имеют стандартный размер, равный, как правило, четырем байтам памяти. Тип double используется в ситуациях, требующих большей по размеру мантиссы.
Булевские (Boolean) типы являются, вероятно, простейшими из всех типов. Диапазон их значений содержит всего лишь два элемента, один для обозначения истинности, другой ложности.
Символьные строки (character strings) представляют собой последовательности символов. Константные строки символов сопровождают вывод результатов, а ввод и вывод всех типов данных часто производится с помощью строк.
Двойственность,Статическая строка,Динамическая ограниченная, неограниченная
Строки и действия над ними
Если строки не определены как элементарный тип, то строковые данные обычно хранятся в массивах, состоящих из отдельных символов, и ссылаться на них можно лишь как на элементы массивов.
Порядковым (ordinal) называется тип, в котором область возможных значений переменных может быть легко связана с последовательностью натуральных чисел. В языках Pascal и Ada, основными порядковыми типами являются целый, символьный и булевский типы. Пользователи сами могут определять разновидности порядковых типов: перечислимые и ограниченные типы.
Перечислимым (enumeration) называется тип, в описании которого перечислены все возможные значения, являющиеся символьными константами
Ограниченным типом (sub range type) называется непрерывная подпоследовательность порядкового типа.
Массивом (array) называется однородное множество данных, в котором каждый отдельный элемент идентифицируется его положением по отношению к первому элементу. Обращение к элементу массива в программе часто содержит один или несколько переменных индекса. Такие ссылки следует вычислять во время выполнения, чтобы определить область памяти, к которой производится обращение. Отдельные элементы массива принадлежат к одному из ранее определенных типов, элементарному или определенному пользователем.
Записью (record) называется возможно неоднородная совокупность данных, в которой отдельные элементы идентифицируются именами. В объектно-ориентированных языках программирования записи обеспечиваются конструкцией классов.
Объединением (union) называется переменная, которая может содержать в различные периоды выполнения программы значения различных типов. Размеченные объединения реализуются простым использованием одинаковых адресов для всех возможных вариантов.
Переменные множественного типа (set type) могут содержать неупорядоченную совокупность отдельных величин, имеющих некоторый порядковый тип, называемый базовым типом (base type). Множественные типы данных часто используются для моделирования множеств в математическом смысле этого термина. Примером может служить анализ текста, для выполнения которого нужно обеспечить хранение и удобное использование таких небольших наборов символов, как знаки пунктуации или гласные буквы.
Указателем (pointer) называется переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения - нулевого адреса. Значение нулевого адреса не является реальным адресом и используется только для обозначения того, что указатель в данный момент не может использоваться для обращения ни к какой ячейке памяти.
Указатели разработаны для применения в двух различных сферах. Во-первых, они позволяют использовать некоторые выгоды косвенной адресации, широко применяемой в программировании на языках ассемблера. Во-вторых, указатели предлагают метод динамического управления памятью: их можно использовать для доступа к области с динамическим размещением памяти, обычно называемой кучей (heap), или динамической памятью.
Языки, в которых предусмотрен тип указателей, содержат, как правило, две основные операции над ними: присваивание и разыменование. Первая из этих операций присваивает указателю некоторый адрес. Разыменование может быть явным и неявным, большинстве современных языков программирования разыменование происходит только при явном указании.
Ссылки
Если при описании функций в качестве формальных параметров используются ссылки, то они обеспечивают двустороннюю связь между вызывающей и вызываемой функциями. Для параметров, которые не являются ни ссылками, ни указателями, это было бы совершенно невозможно, поскольку параметры в языке C++ передаются по значению. Передача указателя как параметра также обеспечивает двустороннюю связь, но при этом приходится выполнять явное разыменование формальных параметров, что делает программу менее читабельной и менее надежной. К ссылкам вызываемая функция обращается точно так же, как и к другим параметрам. Ссылкам компилятор передает адреса, а не значения.