Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 26
Текст из файла (страница 26)
алгоритм, определенный для данного объекта в соответствииТиппри использовании виртуальных функций является дос егоИздержкамитипом.ИмяФормальныеvirtualвозвращаемого( виртуальных)на ТВМ= является0в каждом; доИздержкамипридляиспользованиифункцийполнительнаяпамятьнеявногоуказателяфункции храненияпараметрызначенияИздержкамиприиспользованиивиртуальныхфункцийявляетсядонаТВМвкаждомполнительнаяпамятьдлянеявногохраненияуказателяполиморфном объекте.наТВМвкаждомполнительнаяпамятьдлянеявногохраненияуказателяполиморфном объекте.Такая формазаписи функции означает, что данная функция (точнее —полиморфномобъекте.метод класса) не имеет тела, описывающего ее алгоритм.11.3. Абстрактные классы.Чистые виртуальные функцииАбстрактный класс — это класс, содержащий хотя бы одну чистуювиртуальную функцию.Нельзя создавать объекты на основе абстрактных классов, так как последние, имея в своем составе чистые виртуальные функции, не являютсяполноценными типами данных.
Однако указатели на абстрактные классысоздавать можно.87Несмотря на то, что абстрактный класс не является полноценным87типом, ТВМ для него создается. При этом в ТВМ перечисляются все вирту87альные функции, в том числе и чистые виртуальные функции.В классе-наследнике чистая виртуальная функция может быть переопределена обычной виртуальной функцией с соответствующей заменой пустого значения на адрес данной функции в ТВМ класса-наследника.Класс-наследник абстрактного класса может также быть абстрактнымклассом, если в нем осталась (или была дополнительно введена) хотя бы одначистая виртуальная функция.11.
Основные этапы компиляции (лексический анализ, синтаксическийанализ, семантический анализ, генерация кода и т.д.) Компиляторязыка программированияТаблицыкомпилятораНачальные установкиФазы анализа программИсходнаяпрограммаТекстЛексический анализ(сканер)ЛексемыСинтаксический исемантический анализ(контроль контекстныхусловий)Анализ и локализацияобнаруженных ошибокВнутреннеепредставлениеТаблицыслужебныхидентификаторовТаблицаконстантТаблицаименФазы оптимизации программВнутреннеепредставлениеФазы синтеза программТаблицапроцедурТаблицаблоковРаспределение памятиСообщенияоб ошибкахВнутреннее представлениеТаблицацикловРаспределение регистровВнутреннее представлениеОбъектнаяпрограммаТекст или кодГенерация команд имашинно-зависимаяоптимизацияМножестводругихтаблицНачальные установки.
Перед началом работы с программой компиляторунеобходимо провести инициирующие мероприятия. К таковым относятся ввод иобработка режимов запуска компилятора и первичное заполнение таблиц исходнойинформацией.Фазы анализа программ. На этапе анализа в компиляторе выполняетсяраспознавание текста исходной программы и заполнение информационных таблиц.
ВТаблицаНа следующей странице изображена схема работы компилятораблоков языкапрограммирования. Сплошные стрелки наэтомрисункеуказываютпорядокработыРаспределение памятиСообщениякомпилятора, а пунктирные линии – потоки информации.об ошибкахТаблицаВнутреннеепредставление3.3.1.1. Основные компоненты компилятораи фазыкомпиляциицикловИнформационные таблицы.
При анализе программы из имеющихся в нейРаспределениерегистровописаний, заголовков процедур, блоков,циклов и другихструктурных операторовизвлекаетсяинформация,которая должнасохранятьсяиспользования на11.Основныеэтапы компиляции(лексическийанализ,длясинтаксическийМножествоВнутреннее представлениепоследующих фазах компиляции. Вся эта информацияразмещается в информационныханализ,семантическийанализ,генерациякодаит.д.)таблицах компилятора. Если при просмотре программы встречаетсядругихнекоторыйкоманди он был таблицОбъектная в таблицах должны быть Генерацияидентификатор,сведенияотом,какописани какТекст или кодмашинно-зависимаяпрограммаиспользовался в программе.
Конкретная информация зависит от исходного языка, отоптимизацияобъектногоязыкаи сложности транслятора. Кроме таблицы идентификаторов (“имен”)Лексическийанализобычно строится таблица констант, в которую включаются все константы,использованныепрограмме, ианализазаносятсяих адресав объектнойпрограмме.Основная задачавлексического- разбитьвходнойтекст, состоящийиз последовательности одиночных символов, на последовательность слов, или лексем, тоНачальные установки. Перед началом работы с программой компиляторуесть выделитьэти словаинициирующиеиз непрерывнойпоследовательностисимволов.Все символы27необходимопровестимероприятия.К таковымотносятсяввод ивходнойпоследовательностисэтойточкизренияразделяютсянасимволы,обработка режимов запуска компилятора и первичное заполнение таблиц исходнойпринадлежащие каким-либо лексемам, и символы, разделяющие лексемы (разделители).информацией.В некоторыхлексемамине быть разделителей.С другойстороны,Фазы случаяханализамеждупрограмм.На можетэтапе ианализав компиляторевыполняетсяраспознаваниетексталексемыисходнойпрограммыи незначащиезаполнение символыинформационныхтаблиц.Вв некоторых языкахмогутсодержать(например,символрезультатеформируетсявнутреннеепредставлениепрограммы,можетпонятноепробела в Фортране).ВСинекотороеразделительноезначениесимволов-разделителей блокироваться("\"вконцестрокивнутри"...").следующимфазамкомпиляции.Получаянавходисходнуюпрограммукакследующим фазам компиляции.
Получая на вход исходную программу как28последовательностьпоследовательность символовсимволов входноговходного языкаязыка (“цепочку”),(“цепочку”), компиляторкомпилятор должендолженОбычно все лексемы делятся на классы. Примерами таких классов являются числа (целые,проверить,проверить,принадлежитпринадлежитлилионаонавходномувходному языку,языку, а а такжетакже определитьопределить правила,правила, поповосьмеричные,шестнадцатиричные,действительныеи т.д.), частоидентификаторы,строки.накоторымэтапоследовательностьстроилась.Анализподразделяетсякоторым эта последовательность строилась.
Анализ часто подразделяется наОтдельновыделяютсяключевыесловаи символыпунктуации (иногда их называютлексический,синтаксическийиисемантическийанализ.лексический,синтаксическийсемантическийанализ. символы-ограничители).Как правило,ключевыесловазадача- это некотороеконечноеЛексический(сканер).ОсновнаялексическогоанализатораЛексическийанализаторанализатор(сканер).Основнаязадачалексическогоанализатора––просмотретьтекств внем(минимальныеподмножествоидентификаторов.некоторых иязыках(например,ПЛ/1) смысллексемыпросмотретьвесьвесьтекстисходнойисходнойВпрограммыпрограммыивыделитьвыделитьнемлексемылексемы(минимальныелексическиеединицыилитекстаобладающиесмысломв врамкахлексическиеединицыилиэлементыэлементытекстапрограммы,программы,обладающиесмысломрамкахможетзависетьот ее контекстаи невозможнопровести лексическийанализв отрывеотданногоязыка).Вобычныхязыкахпрограммированиялексемамиявляютсячисладанногоязыка).Вобычныхязыкахпрограммированиялексемамиявляютсячисласинтаксического.(десятичные(десятичныецелые,целые,вещественные),вещественные),идентификаторы,идентификаторы,служебныеслужебныеслова,слова,разделители.разделители.ЗадачейлексическогозаменаразнообразныхэлементовДляосуществлениядвуханализаторадальнейшихфазанализалексическийанализаторвыдаеттекстаЗадачейлексическогоанализатораявляетсяявляетсязаменаразнообразныхэлементовтекстастандартнолексемами,которыев вдальнейшембудетобрабатыватьстандартновыглядящимивыглядящимилексемами,которыедальнейшембудетлегчелегчевследобрабатыватьинформациюдвух типов: длясинтаксическогоанализатора,работающегозавдругихчастяхкомпилятора.Лексическийанализсопровождаетсяисключениемвдругихчастяхкомпилятора.Лексическийанализсопровождаетсяисключениемлексическим, существенна информация о последовательности классов лексем,незначащихтекстовнапример,комментариев.Длянезначащихфрагментовфрагментовтекстовпрограмм,например,комментариев.Длятехтехязыков,языков,ограничителейи ключевыхслов, апрограмм,для контекстногоанализатора,работающеговследзаввкоторыхкоторых имеютсяимеются макросредства,макросредства, дополнительнодополнительно выполняетсявыполняется расширениерасширениесинтаксическим, существенна информация о конкретных значениях отдельных лексеммакровызовов.макровызовов.ПодробнееПодробнеезадачизадачииипроблемыпроблемылексическоголексическогоанализаанализарассматриваютсярассматриваютсявв(идентификаторов,чисели т.д.).пособииграмматикиииязыки.пособии“Формальные“Формальныеграмматикиязыки.ЭлементыЭлементытеориитеориитрансляции”.трансляции”.
СинтаксическийСинтаксическийиисемантическийсемантический анализаторы.анализаторы. ПрограммаПрограмма должнадолжна бытьбытьТаким образом, общая схема работы лексического анализатора такова. Сначалапроверенананасинтаксическуюсинтаксическуюиисемантическуюсемантическуюправильностьправильность(должно(должнобытьбытьпроверенопроверенопроверенавыделяется отдельнаялексема (при этом, возможно, используются символысоблюдение контекстныхконтекстных условий),условий), разделенаразделена нана составныесоставные части,части, длядля каждойкаждой изизсоблюдениеразделители).Ключевыесловараспознаютсяявнымвыделениемнепосредственноизкоторых должнодолжно бытьбыть сформированосформировано внутреннеевнутреннее представление.представление.
ВВ таблицытаблицыкоторыхтекста,либо сначалавыделяетсяидентификатор,а затем делаетсяпроверкатрансляторадолжнабыть занесеназанесенався информация,информация,которуюможно наизвлечь изизтрансляторадолжнабытьвсякоторуюможноизвлечьпринадлежностьмножеству Подробнееключевыхслов.обрабатываемойегопрограммы.Подробнеезадачи ии проблемыпроблемы синтаксическогосинтаксического ии обрабатываемойпрограммы.задачисемантическогоанализаанализарассматриваютсярассматриваютсяв вразделеразделе3.3.23.3.2ииввпособиипособии“Формальные“ФормальныесемантическогоЕсливыделеннаялексемаявляетсяограничителем,то этот ограничитель (точнее,грамматикиязыки.Элементытеориитрансляции”.грамматикиииязыки.Элементытеориитрансляции”.некоторыйего признак)выдается какисходнойрезультатлексическогоанализа.ЕсливыделеннаяВнутреннеепредставлениеисходнойпрограммы.программы.ВнутреннееВнутреннеепредставлениеВнутреннеепредставлениепредставлениелексемаявляетсяключевымсловом, топризнаксоответствующегоисходнойпрограммыкомпиляторенаибольшейстепенизависитототтойтойключевогообработки,исходнойпрограммыв вкомпиляторев ввыдаетсянаибольшейстепенизависитобработки,которойдолжна подвергнутьсяподвергнутьсяпрограмма.Некоторыевидывнутреннегокоторойпрограмма.Некоторыевидывнутреннегослова.Еслидолжнавыделеннаялексема являетсяидентификатором- выдаетсяпризнакпредставлениябольшебольшеподходятдлядляфиксациификсацииструктурыструктурыкомпилируемойпрограммы,представленияподходяткомпилируемойидентификатора,а сам идентификаторсохраняетсяотдельно.Наконец, если программы,выделеннаядругиеориентированынапроведениеоптимизирующихпреобразований,третьидругие принадлежиториентированына проведениеоптимизирующихпреобразований,лексемакакому-либоиз другихклассов лексем (например,лексематретьинаиболееудобныудобныприприсинтезесинтезе(генерации)(генерации)результатарезультатакомпиляции.компиляции.