Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 31
Текст из файла (страница 31)
Инфикснаязапись.ии операндоввв традиционномвидетрехадресныесистемыкоманд.Инфиксная запись. ЗаписьЗапись операцийоперацийоперандовтрадиционномвиде39применяетсятолькоподаваемыхнанавходЭтоМногоадресныйкод с неявноименуемымрезультатом(триады).Триадыприменяетсятольковвпрограммах,программах,подаваемыхвходкомпиляторов.компиляторов.Этонаиболеенаиболееудобнаядлялюдей,нонаименееудобнаядляавтоматическойобработкизапись.представляютсобойзаписьоперацийвформеизтрехсоставляющих:операцииудобная для людей, но наименее удобная для автоматической обработки запись.и двухПрефикснаяоперандов:Префикснаязапись.запись.ПрефикснаяПрефикснаязаписьзаписьиначеиначеназываетсяназываетсяпольскойпольскойзаписьюзаписьюилипрямойпольскойзаписью.Втакойзаписиоператоры(операции)предшествуютили прямой польскойзаписью.
В такой записи операторы (операции) предшествуют<операция>(<операнд1>,<операнд2>)своимоперандам.Некотороесвоим операндам. Некотороенеудобствонеудобствопрямойпрямойпольскойпольскойзаписи,записи,котороекотороепривелопривелоккиспользованиюобратнойзаписи,состоитвтом,чтооператорывнейследуютввтомОсобенностьютриадявляетсято, чтоодиноба операндатриаденемогутиспользованиюобратнойзаписи,состоитв том,чтоилиоператорыв ней вследуютнетомпорядке,ввкакомдолжнывыполнятьсямашине:быть ссылкаминав том вслучае,если в качествеоперанда даннойпорядке,какомонионидругуюдолжнытриадувыполнятьсяввычислительнойвычислительноймашине:триады выступает результат выполнения другой триады, например, так в виде триад== AA -- ++ ** BB CC DD ** BB 1010 A=B*C+D–B*10:можно записатьарифметическое выражение Постфиксная(инверсная,обратная,суффиксная)запись.ВотличиеотПостфиксная1 * (инверсная,BC обратная, суффиксная) запись.
В отличие отпрямойпольскойзаписиинверсная+^1D польскаяпрямой польской2 записиинверснаяпольскаязаписьзапись(ПОЛИЗ)(ПОЛИЗ)обладаетобладаетследующимиследующимиважнымисвойствами:3*B10важными свойствами:•• ОперандызаписиОперандыввобратнойобратнойпольскойпольской39записиследуютследуютввтомтомжежепорядке,порядке,ввкакомкакомониониследуютследуютввинфикснойинфикснойзаписи.записи.•• ОперацииОперацииввобратнойобратнойпольскойпольскойзаписизаписиследуютследуютввтомтомпорядке,порядке,ввкакомкакомонионидолжнывычисляться(слеванаправо).должны вычисляться (слева направо).•• ОперацииОперацииследуютследуютнепосредственнонепосредственнозазасвоимисвоимиоперандами.операндами.
ОбратнаяОбратная польскаяпольская записьзапись являетсяявляется наиболеенаиболее удобнымудобным видомвидом представленияпредставленияпрограммвкомпиляторах.Этазаписьнетребуетучитыватьприоритетыпрограмм в компиляторах. Эта запись не требует учитывать приоритетыопераций,операций,ввнейнейненеиспользуютсяиспользуютсяскобки.скобки.ПОЛИЗПОЛИЗнаиболеенаиболееудобнаудобнаприпритрансляциитрансляцииарифметическихарифметическихвыражений:выражений:AA BB CC ** DD ++ BB 1010 ** –– ==ОбычноОбычно вв компиляторахкомпиляторах длядля переводаперевода программпрограмм вв ПОЛИЗПОЛИЗ разрабатываетсяразрабатываетсяОбъектнаяпрограммаИсходнаяпрограммаи семантическийанализаторы. Программадолжна когдабытьПОЛИЗСинтаксическийпосле проведенияглобальных оптимизирующихпреобразований,проверенана синтаксическуюи семантическую правильностьбытьтребуется преобразоватьуже оптимизированнуюдревовидную(должноструктурув проверенолинейную.соблюдениеконтекстныхусловий),разделенанасоставныечасти,длякаждойизРабота с обратной польской записью в компиляторах подробно рассмотрена в пособиикоторыхдолжнобыть исформировановнутреннеепредставление.
В таблицы“Формальныеграмматикиязыки. Элементытеории трансляции”.трансляторадолжнабытьзанесенавсяинформация,которую можноизвлечь какизЯзык ассемблера и машинные команды. Из определениякомпилятора,обрабатываемойпрограммы.с языкаПодробнеезадачи и проблемысинтаксическогоичастного случая трансляторапрограммированиявысокого уровняна машинныйсемантическогоанализа рассматриваютсяв разделе 3.3.2и в пособии“Формальныеязык или язык ассемблера,понятно, что представлениепрограммыв видемашинныхграмматикииязыки.Элементытеориитрансляции”.команд или ассемблерной записи является обязательным. Однако некоторыеВнутреннеепредставлениеисходнойпрограммы.Внутреннее представлениекомпиляторыпреобразованиемпрограммк такомувиду не заканчиваютсвою работу, аисходнойпрограммывкомпиляторевнаибольшейстепенизависитоттойлишь продолжают ее.
Именно в таком виде наиболее удобно проводитьобработки,машиннокоторойподвергнутьсяНекоторыевиды внутреннегозависимуюдолжнаоптимизацию,при которойпрограмма.легче всего учестьсемантическиеособенностипредставлениябольше подходятфиксацииструктурыдополнительныйкомпилируемой выигрышпрограммы,ввыполнения отдельныхсвязок длякоманди получитьдругиеориентированына проведение оптимизирующих преобразований, третьипроизводительностипрограммы. удобнысинтезе (генерации)результатакомпиляции.Более подробно наиболееИногдав прикомпиляторах,даже оченьсложныхи проводящихглубокуюпредставлениепрограммв компиляторахрассматриваетсяразделе 3.3.3 и внутреннееоптимизацию,тоже возникаетпотребностьна некоторомэтапе в преобразованиявпособии“Формальныеграмматикииязыки.Элементытеориитрансляции”.
транслируемой программы перевести программу к виду, более приближенному к ееФазы оптимизациипрограмм.Оптимизацияважнейшаязадачаможеткомпилятора.окончательномупредставлению.При этомзапись на–языкеассемблеране сразуЯзыкивысокогоуровня,несвязанныенапрямуюсособенностямиконкретнойоказаться наиболее удобным представлением. В таких случаях часто используютаппаратуры,напрограммыкоторой должнывыполнятьсяпрограммы,оптимизациине могутпредставлениес помощьюпсевдокода.От языкабезассемблераон отличаетсяиспользоватьсядлясозданияэффективныхпрограмм.Оптимизацияпрограммможеттем, что в нем могут не приниматься во внимание некоторые архитектурныепроводитьсяинтересахразличныхсвойств программ.Обычноявляетсяиспользуютдвеособенности вцелевоймашины,в частности,для псевдокодаобычнымстратегииоптимизации:оптимизацияповышенияработы программыпредположениео том, чтообъектнаяв целяхмашинаобладает скоростинеограниченнойпамятью иибесконечнымоптимизациячисломв целяхрегистровуменьшенияразмеровпрограмм.Методы,используемыеприобщего назначения.
В псевдокодахболее вольнореализацииэтихформатыстратегийгенерируемыхчасто противоположны,нихограниченияхблизки другиспользуютсякоманд, ахотявсе некоторыеуточненияизобкделаютсядругу. наБолееподробнопроблемыоптимизациипрограммкомпиляторахэтапахраспределенияпамятии регистров,а также вприпроведениирассматриваютсявразделе3.3.4.машинно-зависимой оптимизации, когда уже точно становится известна окончательная Фазы синтезапрограмм.Второйработойявляетсяпоследовательностькоманд,реальныеномераглавнойрегистрови адресакомпилятораоперандов в памяти.генерация результирующей программы. На выходе компилятора должна бытьАнализирующаяОптимизаторПромежуточное3.3.4.
Оптимизацияв компиляторахпостроенапоследовательностьсимволов (“цепочка”) Промежуточноевыходного Генераторязыка по темчастьпредставлениепрограммпредставлениекодаПереходоттрансляциивсейпрограммыкакцелоготрансляцииправилам, которыепредлагаются языком машинных команд или языкомкассемблера.Вкомпиляторапоследовательности относительно независимых операторовII (в синтаксическом плане вконтекстно-свободных грамматикахоператорыдействительно не зависят друг от друга)I29приводит к потере информации о взаимосвязиэтих операторов.
Описанные ранееИнформационныеIIIметоды анализа программ и генерации этих таблицыпрограмм на других языках позволяютрешить главную задачу компиляции – отыскать эквивалентное представление исходнойПервичную оптимизацию может проводить сам пользователь (пометка I).программы в терминах выходного языка. Вторая задача – поиск эффективногоНекоторые системы программирования предлагают поддержку пользовательскойэквивалентасерьезно отличается от первой и требует других подходов и методовоптимизации, в частности, имеют в своем составе профилировщики, помогающиерешения.Под оптимизациейимеется дляв видуобработка,связаннаявыявитьте фрагменты программпрограмм, которыесвоеговыполнениятребуют спереупорядочениемиизменениемоперацийвкомпилируемойпрограммецеляхмаксимальной доли времени работы программы. В целом оптимизация на вуровнеполученияболее программыэффективнойобъектнойпрограммы.исходнойможетдать наибольшийэффект для улучшения техническиххарактеристик программы.таким техническимхарактеристикамотносят обычнодве:Оптимизацияпрограмм –К вынужденнаямера,прибегать к которойприходитсяобъемпамяти,необходимыйдлявыполненияобъектнойпрограммы(дляхраненияпотому, что компилятор не в состоянии выполнить семантический анализ всейданныхи самихкаккомандпрограммы),скоростьи выполненияпрограммы(ееисходнойпрограммыединогообъекта, иоценитьпонять смыслпрограммы.быстродействие).ОченьчастосокращениеиспользуемыхвпрограммеданныхОптимизация программ проводится в компиляторах в различных местах:приводит к увеличению времени работы программы, а попытки повыситьбыстродействие приводят к увеличению используемой памяти.
Поэтому часто дляоптимизации выбирается один, главный критерий, либо некоторый интегрированныйкритерий, основанный на сбалансированномподходе к достижению многих целей41одновременно.При выборе используемых в компиляторе оптимизирующих преобразованийруководствуются следующими критериями:••все преобразования должны быть эквивалентными (для всех наборовданных, даже неправильных).
Эквивалентные преобразования сохраняютсемантику исходной программы;“стоимость” преобразования должна быть сопоставима с затрачиваемымиусилиями и полученными эффектами. Время компиляции от включенияоптимизирующих преобразований всегда растет, но иногда это не оченьважно. Важнее, чтобы при оптимизации не вносились дополнительные быстродействие приводят к увеличению используемой памяти. Поэтому часто дляоптимизации выбирается один, главный критерий, либо некоторый интегрированныйкритерий, основанный на сбалансированном подходе к достижению многих целейодновременно.При выборе используемых в компиляторе оптимизирующих преобразованийруководствуются следующими критериями:•все преобразования должны быть эквивалентными (для всех наборовданных, даже неправильных).