Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 30
Текст из файла (страница 30)
ЕслиЕсли отот компиляторакомпилятора нене требуетсятребуется проведенияпроведения серьезнойсерьезнойстадийявляетсяподвыражениеab,аправым—простоевыражениес.КогдаскобкиВоперацииПОЛИЗеоперандывыписаныслеванаправовпорядкеихследованиявисходномобычной записиарифметическихоптимизациипрограмм,выбираетсявыражений);схема, вв которойкоторой синтаксическийсинтаксический разбор,разбор,оптимизациипрограмм,выбираетсясхема,явнонерасставлены,каквслучаяхabсиabc,важноучитыватьприоритеттексте.Знакиоперацийстояттакимобразом,чтознакуоперациинепосредственнопредше• префикснаяанализзаписьи(операциизаписываютсяперед своимиоперандами,какпроходевоперасемантическийгенерацияобъектнойпрограммысовмещеныводномодномсемантическийанализигенерацияобъектнойпрограммысовмещенывпроходеций,атакжеассоциативностьоперацийодинаковогоприоритета.Умножениеимеетбольствуют ее операнды.записи вызовапроцедурыили функциис параметрами);компилятора.Втакойсхемевнутреннеепредставлениепрограммысуществуеттолькокомпилятора.В такойсхемевыражение,внутреннеепредставлениесуществуетший приоритет,чемсложение,поэтому всостоящеевыраженииa однойbпрограммыc операндb относитсяктолькоопераПростымбудемназыватьизконстантыили именипе• постфикснаязаписьуровне,(операциизаписываютсяпослесвоихоперандов);наконцептуальномвыражаясьтольковпоследовательностишаговнаконцептуальномуровне,выражаясьтольковпоследовательностишаговременной.Такиеассемблеравыраженияцелевойв ПОЛИЗеостаются безизменений.
При переводе в ПОЛИЗ• языкили абстрактноймашины.преобразований.преобразований.сложныхвыражений важно правильно определять границы подвыражений, являющихся ле- Связныесписочныеструктуры.СпискиэтоструктурыпредставленияСвязныесписочныеструктуры.структурывыми и правымиоперандамибинарныхопераций.СпискиПроблем––неэтовозникает,еслипредставлениясложныепод81программ,которыеможнонаиболеепростоиэффективностроитьнаэтапе37программ,которые можнонаиболеепростои эффективнона этапевыраженияявно ограниченыскобками.Например,в выражении(a b) сстроитьлевым операндомсинтаксическогоанализа.
ОбычноОбычноспискииспользуютсядля с.представленияпредставлениясинтаксическогоанализа.спискидляоперацииявляется подвыражениеa b, а правым— используютсяпростоевыражениеКогдаскобкисинтаксическихдеревьев–такихструктур,вершинамикоторыхявляютсяоперации,синтаксическихдеревьев– такихявляютсяоперации,явно нерасставлены, какв случаяхa bструктур,с и a вершинамиb c, важнокоторыхучитыватьприоритетопера-аалистьямиоперанды.
КакКак правило,правило,листьяприоритета.связаны ссУмножениезаписями вимеетв таблицахтаблицахций, алистьямитакжеассоциативностьоперацийодинаковогоболь– – операнды.листьясвязанызаписямиидентификаторовиконстант.Структурасинтаксическихдеревьевнаиболееточноший приоритет,чем сложение,поэтомув выраженииa b c операндb относитсяк операидентификаторови констант.Структурасинтаксическихдеревьевнаиболееточноотражаетсинтаксиссинтаксисязыкаязыкапрограммирования,программирования, нана которомкотором былабыла написананаписана исходнаяисходнаяотражаетпрограмма.Обычнопередпостроениемсинтаксическихдеревьеввграмматикахязыкапрограмма. Обычно перед построением синтаксических деревьев в грамматиках языкаизбавляютсяототцепныхцепныхправилправилвидавидаAA→→B,B,гдегдеAAииBB–нетерминальные–нетерминальныесимволы.символы.избавляются81 техслучаях,случаях,когдакогдасинтаксическомусинтаксическомудеревудеревусоответствуетсоответствуетпоследовательностьпоследовательностьВВтехопераций,порождающаяпорождающаяв врезультатерезультатекомандыкомандыобъектнойобъектной программы,программы, такоетакое дереводеревоопераций,называютдеревомопераций.Деревооперацийстроитсянепосредственноназывают деревом операций.
Дерево операций строится непосредственно ииавтоматическиизиздеревадеревавывода,вывода,порождаемогопорождаемого синтаксическимсинтаксическим анализатором.анализатором. ДляДляавтоматическиэтогоизизнегонегоудаляютсяудаляютсяцепочкицепочкинетерминальныхнетерминальныхсимволов,символов,аатакжетакжеузлы,узлы,нененесущиенесущиеэтогосемантическойнагрузкипригенерацииобъектнойпрограммы(например,скобки,семантической нагрузки при генерации объектной программы (например, скобки,меняющиепорядокпорядокопераций):операций):меняющие ПредставлениеПредставление=арифметического=арифметическоговыраженияязыкаСи++Си++выражения языкаA=B*C+D–B10A = B * C + D – B **10видедеревадереваоперацийоперацийвввиде(одинизвозможных(один из возможных––вариантов)Aвариантов)A++2 +T1DT2программы и переупорядочениемопераций.3 *B10T3 Многие оптимизирующие компиляторывыбирают именно4древовидныеструктурыT2T3T4для внутреннего представления программ.Недостатком5 деревьев=T4 является?Aсложность их преобразования в линейнуюпоследовательность команд объектной программы.При вычислениикодвыражения,записанногорезультатомв форме тетрад,они вычисляютсяМногоадресныйс явно именуемым(тетрады).Тетрадыпоследовательноодназадругой,безкаких-либоприоритетов.Есликакой-топредставляют собой запись операций в форме четырех составляющих: операции, двухизоперандов и(илиоба) в операции:тетраде отсутствует (как в унарной операции), он заменяетсяоперандоврезультатапризнаком пустого операнда.
Результат тетрады никогда опущен быть не может.<операция>(<операнд1>,<операнд2>,<результат>)Порядок вычислениятетрад может быть изменен только явно с помощью специальныхтетрад,Тетрадывызывающихпереходыпо последовательноститетрадвпередкакиливназад.составляютлинейнуюпоследовательностькоманд,следующейзаписываютсяв линейнойпоследовательности,поэтому их легкозаписи ТетрадыарифметическоговыраженияA=B*C+D–B*10в виде последовательностипреобразовать в последовательность команд объектной программы, либо в языктетрад:- - ^2^2от языка^3^3 ассемблера, тетрады не зависят от архитектурыассемблера, но 4в4 отличиеCкоторойT1 ведется компиляция, и являются машинно=*= ABA для ^4вычислительной515системы,^42 +T1DT2независимымпредставлениемпрограмм.Некоторые сложностиреализуетсяпри работе снастоящимтетрадамиСсылканана3триадыкомпиляторах*Bввреальных10T3Ссылкатриадыреальныхкомпиляторахобычнообычнореализуетсянастоящиммогутвозникатьпотому,чтоувычислительныхмашинредковстречаютсяуказателем,чтотриадыструктурой4делаетT2T3 списочнойT4указателем,чтоделаеттриадысписочнойструктурой ии облегчаетоблегчает процессыпроцессытрехадресныесистемыкоманд.5 = ТемT4самым,? назватьA преобразованиятриад.триадыполностьюлинейнойструктуройпреобразованиятриад.Темсамым,назватьтриадыполностьюлинейнойструктуройМногоадресныйкодснеявноименуемымрезультатом(триады).Триадынельзя.ВВ тото жевремятриадыможнорассматриватьии каклинейнуюнельзя.жезаписьвремятриадыможнокаклинейнуюПривычислениивыражения,записанноговрассматриватьформететрад, онивычисляютсяпредставляютсобойоперацийвформеизтрехсоставляющих:операциии двухпоследовательность,еслирезультатывычисленийоперацийтриадхранитьвовременнопоследовательность,есливычисленийтриад хранитьво временнопоследовательноодназа результатыдругой, безкаких-либооперацийприоритетов.Если какой-тоизоперандов:выделяемойпамяти.Такоесвойствотриадприводиткнеобходимостииспользованияввыделяемойпамяти.свойствотриад приводитк необходимостиоперандов (илиоба) Такоев тетрадеотсутствует(как в унарнойоперации), использованияон заменяется вкомпиляторахспециальныхалгоритмовраспределенияпамятидля<операция>(<операнд1>,<операнд2>)компиляторахспециальныхалгоритмовраспределенияпамятибытьдляне храненияхраненияпризнаком пустогооперанда.
Результаттетрадыникогда опущенможет.промежуточныхрезультатов,посколькувотличиеоттетрад,какие-либоявныепромежуточныхрезультатов,посколькув отличиеот тетрад,какие-либоявныеПорядок вычислениятетрад можетбыть изменентолько явнос помощьюспециальныхОсобенностьютриадявляетсято,чтоодинилиобаоперандавтриадемогутвременныепеременныевтриадахнеиспользуются.временныепеременныев триадахне используются. тетрад вперед или назад.тетрад, вызывающихпереходыпо последовательностибыть Триадыссылкамина другуютриадув томслучае, если в программкачестве операндаданнойтребуютменьшепамятидляииимеютТетрады требуютзаписываютсялинейнойпоследовательности,поэтомуих влегкоТриадыменьшев памятидляпредставленияпредставления программимеютвэтомэтомтриадывыступаетрезультатвыполнениядругойтриады,например,такввидетриадпреимуществотетрадами,жеближепреобразовать передв последовательностьобъектнойлибомашиннымв языкпреимуществопередтетрадами,кктомутомукоманджетриадытриадыближекпрограммы,кдвухадреснымдвухадресныммашиннымможно записатьарифметическоевыражениеA=B*C+D–B*10: к окончательному видукомандам,чемпоэтомуихлегчеассемблера,но тетрады,втетрады,отличиеот языкатетрады не зависятот архитектурыкомандам,чемпоэтомуихассемблера,легчепреобразовыватьпреобразовыватьк окончательномувидуобъектнойпрограммы.Вособенноститриадыудобныдлятрансляциивобъектныйвычислительнойсистемы,длякоторойведетсякомпиляция,иявляютсямашинно1 * В особенностиBCобъектной программы.триады удобны для трансляции в объектныйкодкодтакихвычислительныхмашин,вкомандахкоторыхпервыйоперандчастохранитсянезависимымпредставлениемпрограмм.Некоторыесложностиприработестетрадами2+^1Dтаких вычислительных машин, в командах которых первый операнд часто хранитсявводномрегистров.могутизизвозникать3 потому,*B что 10у вычислительных машин редко встречаютсяодномрегистров.