Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 36
Текст из файла (страница 36)
Темболее, подобныедействия мусора”по формированиюзон системойили блоковпамяти, определениюПроцесс “сборкизапускаетсяуправленияпамятью всмещенийвэтихзонах,припискерегистровнекоторымэлементампроизвольные моменты времени, что может влиять на процесс решения сразуданных,многихнеобходимывкомпиляторах.Припроведениитакихдействийпроизводитсязадач, работающих в вычислительной системе в одно и то же время. Эффективнаякомпоновкав блоки,являетсявыравниваниена границыфизических какэлементовреализация данныхэтого процессаодной данныхиз важнейшиххарактеристик,системпамяти(байтов,слов,страниц),атакжепорегистрамспециальногоназначенияпрограммирования, так и программ системной поддержки.(векторным регистрам, регистрам устройства работы с вещественными числами).
Более3.3.6. Генерациякода памяти рассматривается в разделе 3.3.5.детальнораспределение Завершающейстадиейкомпилятора являетсягенерациякода(команд,Генерациякоманди работымашинно-зависимаяоптимизация.Этапгенерацииконстанти т.д.) объектнойпрограммы.Генераторкодаэтапполучаетна входкоманд(кода)проводитсяв компиляторах,однакоиногда этотприсутствуетивпромежуточноепредставлениеисходнойпрограммыивырабатываетэквивалентнуюинтерпретаторах.
На этом этапе производится окончательное преобразованиеобъектную программу,используядля этойпрограммыцели всю кинформацию,накопленнуювнутреннегопредставлениятранслируемойзаписи на машинномязыкекэтомув информационных таблицах компилятора.илина моментуязыке ассемблера. Работагенераторане зависитот того,соимеетсяли передфазойгенерацииВ интерпретаторе (точнеев трансляторесмешаннойстратегиейтрансляции)дополнительнаяфазапрограммой,оптимизации,или онаотсутствует. внутреннееМатематическипроблемаэтачасть заменяетсякотораяинтерпретируетпредставлениегенерациипрограммы.эффективнойобъектнойпрограммыявляется неразрешимой,но на практикеисходнойОднаковозникновениепрограммы,готовой к интерпретацииили выполнению в результате работы только компилятора, возможно не всегда.
Многиеприменяются достаточно эффективные эвристические подходы, дающие хорошиесовременные языки, среди которых Си, Си++, Java, предлагают другую концепциюрезультаты, хотя и не абсолютно оптимальные.57программы, основанную на понятии “единицытрансляции”. Использование этихНа вход генератора кода поступает внутреннее, промежуточное представлениеязыков предполагает, что при запуске компилятора компилируется только некотораякомпилируемой программы, полученное на начальных стадиях компиляции,часть полной программы, а остальные части добавляются к ней по мере готовностиосуществляющих анализ исходной программы и построение информационных таблицдругими компонентами системы программирования, например, редактором связей.компилятора. Обычно таблица информации используется генератором кода дляВ подобных случаях интерпретацию программы также нельзя проводитьопределения тех адресов объектов программы, которые они будут иметь в процессенепосредственно после ее компиляции.
Необходимо сначала подключить к программевыполнения программы. Так как перед началом генерации кода уже выполненнедостающие фрагменты, одни из которых (может быть) надо сначаласинтаксический разбор, отсеяны очевидно ошибочные конструкции и получено полноеоткомпилировать, а другие (может быть) добавить из набора уже откомпилированныхвнутреннее представление исходной программы, во внутреннем представлениипрограмм, либо из библиотек.программы эти объекты обозначаются специально построенными внутреннимиБолее детально проблемы генерации кода рассматриваются в разделе 3.3.6.именами, по которым записи об объектах легко отыскать в информационных таблицах,а не темиименами, которыеприсвоил им программист. 3.3.1.2.Однопроходныйкомпилятор Внутреннее представление,вход генераторакода, можетиметьРазобраннаясхема работыпоступающеекомпиляторанаявляетсяконцептуальной.Многие компиляторы,однако,с отступлениями(иногда значительными)отразличные формы.Одно построеныиз самых существенныхпредположений,которые делаются рассмотреннойпри разработке генераторовкода,компиляциисостоит в том,что вразбиватьсяпоступающемего входсхемы.
Фазымогутна наотдельные составляющиевнутреннем представлениипрограммыотсутствуютиногдаили, напротив,объединятьсядруг с ошибкидругом. (хотяМожетдаже генерацияменяться кода выполняется параллельно с семантическим анализом программ).порядок их выполнения. Выбортойкомпиляторыили иной схемыопределяетсямногимиОдним изРеальныеготовятрезультатысвоейобстоятельствами.работы в виде объектных программ, для кодирования которых могут использоваться такие виды языков: критериев является объем доступной оперативной памяти. Если памяти недостаточно,приходится разбивать процесс компиляции на части, передавая разработчикам• машинныев абсолютныхадресах;информациюотоднойкодычастик другой черезвнешнюю память, в которую записывается •перемещаемыймашинныйкод;представление транслируемой программы.
Существуют и другие промежуточное• язык ассемблера целевой машины; критерии, например, планируемая скорость работы транслятора, степень оптимизации• другой язык программирования высокого уровня. программ.Привыполнениипроходакомпиляторувся информация, Машинныйязык вкаждогоабсолютныхадресахимеет своидоступнапреимуществав том, чтовинформационныхтаблицахнапредыдущихпроходах.Привыполнении накопленнаяпрограммы на таком языке могут помещаться в фиксированные места памяти машины и немедленно выполняться. Такие системы обычно используются в целях обучения30 языкам и методам программирования. Некоторыеязыки программирования (Алгол-60 и Паскаль) специально разрабатывались в расчете на использование подобной схемы компиляции.
Для других языков больше подходят другие режимы работыкомпиляторов.Генерация перемещаемого объектного модуля с внутренним кодированием намашинном языке обеспечивает возможность раздельной компиляции файлов, изкоторых строится текст программы. Множество перемещаемых объектных модулей12.ПостроениеПостроениедетерминированногодетерминированногоконечногоавтоматарегулярному12.конечногоавтоматапо порегулярномувыражению.выражению.12. Построение детерминированного конечного автомата по регулярному12.ПостроениедетерминированногоконечногоПустьконечныйалфавит.РегулярноеРегулярноемножествов алфавитеTрегулярномуопределяется12.Построениедетерминированногоконечногоавтоматапо регулярномуПустьTT - -конечныйалфавит.множествовавтоматаалфавитеTпоопределяетсявыражению.выражению.рекурсивноследующимследующимобразомобразом(знаком(знакомбудемобозначатьпринадлежностьрекурсивно'<-''<-'будемобозначатьпринадлежностьвыражению.ПустьT - конечныйалфавит.Регулярное множество в алфавите T определяетсямножеству,знаком'<=''<='включение):включение):множеству,знакомрекурсивноследующимобразом(знакоммножество'<-' будем обозначатьПусть T - конечныйалфавит.Регулярноев алфавитепринадлежностьT определяется1.,(пустоемножество)регулярноемножествовалфавитеT;1.,(пустоемножество)регулярноемножествовалфавитеT;множеству,'<=' включение):рекурсивнознакомследующимобразом (знаком '<-' будем обозначать принадлежность2.2.
{a}- -регулярноемножествов алфавитеT длякаждогоa<-a<T; T;{a}регулярноемножествов алфавитеT длякаждогомножеству, знаком '<=' включение):3.3.,-,е- - регулярноемножествов алфавитеT (e- пустаяцепочка);,ерегулярноемножествов алфавитеT (eпустаяцепочка);1.(пустоемножество)- регулярноемножествов- алфавитеT;4.еслиPиQрегулярныемножествавалфавитеT,тотаковыи множества4.{a}Pи Q- регулярныемножествавTалфавитеT, тои множества2.1.- регулярноемножествов алфавитедля каждогоa<-таковыT;T;же же,-если(пустоемножество)- регулярноемножествов алфавитеPUQ(объединение),3.2.
,емножество(e -каждогопустая цепочка);P U Q (объединение),{a}- -регулярноерегулярноемножество вв алфавитеалфавите TT дляa<- T;PQ(конкатенация,т.е.множествоpq,p<-P,q<-Q),4.3. еслиPиQрегулярныемножествавалфавитеT,q<-Q),то таковыже и множестваPQ (конкатенация,т.е.в множество,е- - регулярноемножествоалфавите Tpq,(e p<-P,- пустаяцепочка);P*(итерация:P*=,eUPUPPU...;UQQ(итерация:P*=,eU P U PP U...;4. если PPиP*-(объединение),регулярныемножествав алфавите T, то таковы же и множества5.5. ничтодругоененеявляетсярегулярныммножествомв алфавитеT. T.(конкатенация,т.е.множествоpq,множествомp<-P, q<-Q),ничтоPQдругоеявляетсярегулярнымв алфавитеP U Q (объединение),P*P*=,e-т.е.U PмножествоU PP U...; pq, p<-P, q<-Q),PQ(итерация:(конкатенация,5. ничто P*другоенеявляетсярегулярныммножеством в алфавите T.(итерация:P*=,eU P U PP U...;Итак, множествов алфавитеT регулярнотогда и только тогда, когда оно либо ,-, либоИтак,множествовнеалфавитеT регулярнымрегулярно тогдаи только тогда,когда T.оно либо ,-, либо5.ничтодругоеявляетсямножествомв алфавите,e-,либо ,aдля некоторогоa<-T,либо его можнополучить изэтих множеств ,e-, либо ,a- для некоторого a<-T, либо его можно получить из этих множествприменениемконечногочислаоперацийобъединения,конкатенациииитерации.Итак,множествоконечногов алфавитеT регулярнои только тогда,когда онои итерации.либо ,-, либоприменениемчислаоперацийтогдаобъединения,конкатенацииПриведенноевышеопределениерегулярногомножестваодновременноопределяет,e-,либо,a- длявышенекоторогоa<-T,либорегулярногоеготогдаможнополучитьиз этихмножествИтак,множествов алфавитеT регулярнои толькотогда,когдаоно либо,-, либоПриведенноеопределениемножестваодновременноопределяетиформуегозаписи,которуюбудемназыватьрегулярнымвыражением.Дляприменениемконечногочислаa<-T,операцийобъединения,конкатенациии итерации.,e-,либо ,aнекотороголибоназыватьегоможнополучитьизэтих множестви формуего длязаписи,которуюбудемрегулярнымвыражением.ДлясокращенногообозначениявыраженияPP*будемпользоватьсязаписьюP+ и там,гдеПриведенноевышеопределениерегулярногомножестваодновременноопределяетприменениемконечногочислаоперацийобъединения,конкатенациииитерации.сокращенногообозначениявыраженияPP*будемпользоватьсязаписьюP+итам,гденеобходимо,будемиспользоватьскобки.В этойзаписи наивысшимприоритетомиэтоформуегозаписи,которуюбудемназыватьрегулярнымвыражением.ДляПриведенноевышеопределениерегулярногомножестваодновременноопределяетэто необходимо,будемиспользоватьскобки.этой записинаивысшимобладаетоперация*, затемконкатенацияи, Внаконец,операцияU, дляприоритетомзаписисокращенногообозначениявыраженияPP*будемпользоватьсязаписьюP+Дляизаписитам, гдеиобладаетформу егозаписи,которуюбудемназыватьрегулярнымвыражением.операция*,затемконкатенацияи,наконец,операцияU,длякоторой иногда будем использовать значок '|'.этонеобходимо,будем использоватьскобки.В этой пользоватьсяприоритетомсокращенногообозначениявыраженияPP* будемзаписьюP+ и там, гдекоторойиногдабудем использоватьзначок'|'.
записи наивысшимобладаетоперация*,затемконкатенацияи,наконец,операцияU,длязаписиэто необходимо, будем использовать скобки. В этой записи наивысшим приоритетомкоторойбудемзначок '|'.обладаетиногдаоперация*, использоватьзатем конкатенацияи, наконец, операция U, для записи Детерминированный конечный автомат (ДКА) - это пятерка M=(Q,T,D,q0,F), гдекоторой иногда будем использовать значок '|'.Детерминированный конечный автомат (ДКА) - это пятерка M=(Q,T,D,q0,F), где1. Q - конечное множество состояний;2.1.