- •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-средства. Направления интеллектуализации.
36. Абстрактные типы данных. Способы реализации.
37 Объектно-ориентированные языки программирования. Способы реализации.
Структура данных «класс», представляющая собой объектный тип данных, внешне похожа на типы данных процедурно-ориентированных языков, такие как структура в языке Си или запись в Паскале или QuickBasic, в которой поля могут сами быть не только данными, но и методами (то есть процедурами или функциями). Таким образом, в простейшем случае объектно-ориентированное программирование получается добавлением к процедурно-ориентированному процедурного типа данных, то есть, переменных, способных принимать значение функций и процедур. Вдобавок класс поддерживает такие свойства как наследование, полиморфизм и отчасти — инкапсуляцию. Объектное программирование противопоставляется процедурному программированию, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Кроме того, в объектно-ориентированном программировании часто большое значение имеет понятие события.
38 Обработка исключительных ситуаций. Способы реализации.
Исключения позволяют построить “безопасную” программу. В зависимости от места положения решается вопрос о видимости. Язык Ada использует программные модули или блоки для указания области видимости обработчиков исключительных ситуаций. Язык C++ для этой цели использует специальную конструкцию, которая начинается зарезервированным словом try. Конструкция try содержит составной оператор, называемый оператором try, и список обработчиков исключительных ситуаций. Составной оператор определяет область видимости последующих обработчиков.
Каждая функция catch представляет собой обработчик исключительной ситуации. Функция catch может иметь только один формальный параметр, подобный формальному параметру в определении функции в языке C++, включая возможность указания в качестве формального параметра эллипсиса (...). Формальный параметр может быть просто спецификатором типа, например, float, как в прототипе функции. Когда информация об исключительной ситуации передается в обработчик, параметр содержит тип и имя переменной, используемой для этой цели. Например, пользователь может определить в качестве исключительной ситуации некий класс и включить в него столько данных-членов, сколько необходимо. В противном случае формальный параметр является просто типом, и его предназначение заключается в однозначной идентификации обработчика. Обработчик с эллипсисом в качестве формального параметра является универсальным (catch-all handler); он активизируется при любых исключительных ситуациях, если ранее не был выбран другой обработчик.
В языке C++ обработчики исключительных ситуаций могут содержать любой код на этом языке.
Связывание исключительных ситуаций с обработчиками
Исключительные ситуации в языке C++ возбуждаются только явным оператором throw, имеющим следующий общий вид: throw[выражение]
Квадратные скобки являются метасимволами, используемыми для того, чтобы указать на необязательность выражения. Оператор throw без операнда может появляться только в обработчике. При этом он повторно возбуждает исключительную ситуацию, которая затем обрабатывается где-нибудь в другом месте. Это в точности повторяет использование оператора raise в языке Ada без указания имени исключительной ситуации.
Ключевое слово throw было выбрано потому, что слова signal и raise являются именами функций в стандартной библиотеке функций ANCI С.
По типу выражения throw выбирается конкретный обработчик, который, конечно, должен иметь "соответствующий" тип формального параметра. В этом случае слово "соответствующий" означает следующее: обработчик с формальным параметром типа Т, const Т, Т& (ссылка на объект типа Т) или const T& соответствует оператору throw с выражением, имеющим тип Т. Если тип Т является классом, "соответствующим" является обработчик, параметр которого имеет тип Т, или любой класс, являющийся предком класса Т. Существуют более запутанные ситуации, в которых выражение throw соответствует формальному параметру, но здесь они не рассматриваются.
Исключительная ситуация, возбужденная конструкцией try, приводит к немедленному завершению выполнения кода в данной конструкции try. Поиск соответствующего обработчика начинается с обработчика, непосредственно следующего за конструкцией try, и выполняется последовательно, пока не будет найден подходящий обработчик. Это означает, что если некоторый другой подходящий обработчик предшествует обработчику, точно соответствующему данному выражению throw, то точно соответствующий обработчик не будет использован. Если в программе есть оператор catch с эллипсисом в качестве формального параметра, он будет подходить для любого выражения throw, так что бесполезно помещать такие операторы catch где угодно, кроме конца списка обработчиков.
Исключительные ситуации обрабатываются локально, только если соответствующий обработчик также является локальным. Если не найден ни один подходящий локальный обработчик, исключительная ситуация передается в модуль, вызвавший функцию, в которой эта ситуация возникла. Если во всей программе не найден ни один подходящий обработчик, то выполнение программы завершается.