Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 22
Текст из файла (страница 22)
Сначала осуществляетсяразметка синтаксическогодеревадеревапопоследующимследующимправилам.правилам.разметкаПравиласинтаксическогоразметки:Правиларазметки:1)разметки:есливершина - правый лист или дерево состоит из единственнойПравилаПравиларазметки:1)есливершинаправыйлистилидереводеревосостоитиз единственнойвершины,помечаемэтувершинучислом1, еслисостоитвершина-единственнойлевый лист,1) есливершина- -правыйлистилиизвершины,помечаемэтувершинучислом1,есливершиналевый лист,лист,1)есливершинаправыйлистилидеревосостоитизединственнойвершины,помечаемпомечаемее 0 (рис.
8.14).вершины,эту вершину числом 1, если вершина - левыйпомечаем0 (рис.числом8.14). 1, если вершина - левый лист, помечаем ее 0 (рис. 8.14).помечаемэтуеееевершинуR (ll)R (lr)R (ll+1)помечаем0 (рис. 8.14).R (ll)R (lr)R (l +1)R (ll)R (lr)R (lll+1)lllr lllrllllr R0 |lrl|1Rlllllrlr01R+1R RR+1RR+10 / \1/ \||R+1R RR+1 RR+1R+1а) l <lR Rб) l >lR+1 RR+1а)б)в)ll=lrlr/\/\ll/\lrll/\lrl rа)б)а) ll<lrб) ll>lrв)ll=lrа) Рис. 8.14б)а)l<lб)l>lв)ll=lrlrlrРис.
8.150/\/\1/\/\Рис. 8.14Рис. 8.152)/ есливершина имеетпрямыхl и l2, то вРис.8.14Рис.R+18.15 R потомков сR метками\ / \R+1 12)есливершинаимеетпрямыхпотомковсметкамито в1 и ll22, либокачествеметкиэтой вершинывыбираембольшеесизметкамичисел l 1llили2) ---есливершинаимеетпрямыхпотомковиl,тов---качествеметкиэтойвершинывыбираем большее из чисел l 1 1или 2l2 либочислоl+1,еслиl=l(рис.8.15).112качестве метки этой вершины выбираем большее из чисел l 1 или l2 либочисло l1+1,если lб)(рис. 8.15).определить,1=l2позволяеткакое изб)поддеревьевтребуета)разметкаа) ll<lrll>=lrчисло l1Эта+1,еслиl=l(рис.8.15).12Эта количестваразметка позволяеткакое из поддеревьев требуетбольшегорегистровопределить,для своего вычисления.Этаразметкапозволяетопределить,какоеиз поддеревьевтребуетбольшегоколичестварегистровдлясвоеговычисления.Затем осуществляется распределение регистровдля результатовбольшегоколичестварегистровраспределениедля своего вычисления.Затемосуществляетсяопераций.Рис.
8.14Рис. 8.15регистров для результатовЗатемосуществляетсяраспределениерегистров для результатовопераций.Правилараспределениярегистров.операций.Правилараспределениярегистров.1) Корнюназначаетсяпервый регистр.Правилараспределениярегистров.1) Корнюназначаетсяпервый2)Еслиимеетметкалевогопотомкаменьшето левому2) если вершинапрямыхпотомковсрегистр.меткамиl1 иметкиl2, то в правого,качестве меткиэтой1)Корнюназначаетсяпервыйрегистр.2)Если меткалевогопотомкаметкиправого,толевомупотомкуназначаетсярегистрнабольший,чемеслипредку,правомувершинывыбираембольшееиз чиселl1единицуили l2 меньшелибочислоl1+1,l1=l2. аЭтаразметка2)Еслиметкалевогопотомкаменьшеметкиправого,толевомуназначаетсярегистрна единицутребуетбольший,чем предку,правомуспотомкутем жеопределить,номером (сначалаправоеподдеревои егоа результатпозволяеткакоеиз вычисляетсяподдеревьевбольшегоколичестварегистровпотомкуназначаетсярегистрвычисляетсяна единицу больший,чем предку,а правомустемженомером(сначалаправоеподдеревоиегорезультатдля своего вычисления.
Затем осуществляетсяраспределение регистров для результатов136с тем же номером (сначала вычисляется136правое поддерево и его результатопераций.Правила распределения регистров:1) Корню назначается первый регистр.136помещается в регистр R), так что регистры занимаются последовательно.Еслиже меткалевого потомкабольшеили равнаметке правогопотомка,помещаетсяв регистрR), так чторегистрызанимаютсяпоследовательно.помещаетсярегистрR),так чторегистрызанимаютсятонаоборот,вычисляетсялевоеподдеревоипоследовательно.его результатЕслиже меткавсначалалевого потомкабольшеили равнаметке правогопотомка,Еслижеметкалевогопотомкабольшеилиравнаметкеправогопотомка,помещаетсяврегистрR(рис.8.15),аправомупотомку–R+1.Послеэтогото наоборот, сначала вычисляется левое поддерево и его результатто наоборот,сначалавычисляетсялевое поддеревои егоПослерезультатформируетсяпо следующимправилам.помещаетсявкодрегистрR (рис.8.15),а правомупотомку – R+1.этогопомещаетсяврегистрR(рис.8.15),аправомупотомку–R+1.ПослеэтогоПравилакодгенерациикода: правилам.формируетсяпо следующимформируетсякодпо следующимправилам.1)если вершина- правыйс меткой 1, то ей соответствует кодПравилагенерациикода: листПравилагенерациикода:LOAD 1)X,R,R - регистр,этойвершине,а X - адресеслигдевершина- правыйназначенныйлист с меткой1, тоей соответствуеткод1)есливершинаправыйлистсметкой1,тоейсоответствуеткодLOAD X,R, связаннойгде R - регистр,назначенныйэтой вершине, а X - адреспеременной,с вершиной(рис.
8.16.б);LOADX,R,гдеRрегистр,назначенныйэтой вершине,X - адреспеременной,с вершинойи (рис.8.16.б);2) если связаннойвершина внутренняяее левыйпотомок- лист с аметкой0, топеременной,связаннойсвершиной(рис.8.16.б);2) если вершинавнутренняяей соответствуеткод (рис.8.16а) и ее левый потомок - лист с меткой 0, то2)есливершинавнутренняяейсоответствуеткод(рис. 8.16а) и ее левый потомок - лист с меткой 0, тоКодправогоподдереваей соответствует код (рис. 8.16а)OpКодX,Rправого поддереваКодправого поддереваOp X,RX,RR - регистр, назначенный этой вершине, X - адрес переменной, гдеOpсновагде снова Rрегистр, назначенныйэтой вершине,X - адреспеременной,связаннойс -вершиной,а Op - операция,примененнаяв вершине(рис.гдесноваRрегистр,назначенныйэтойвершине,Xадреспеременной,связанной с вершиной, а Op - операция, примененная в вершине (рис.8.16.а);связанной с вершиной, а Op - операция, примененная в вершине (рис.8.16.а);3) если непосредственные потомки вершины не листья и метка8.16.а);если непосредственныепотомкивершиныне листьякоди меткаправой3)вершиныбольше метки левой,то вершинесоответствует3) если непосредственные потомки вершины не листья и меткаправойбольшеметки левой, то вершине соответствует кодКод вершиныправогоподдереваправойвершины большеметки левой, то вершине соответствует кодКод левогоправогоподдереваподдереваКодКод левогоправогоподдереваподдереваКодOpR+1,RКод левого поддереваOp R+1,RR+1,R назначенный внутренней вершине, и операция Op, вообщегде ROp- регистр,где R - нерегистр,назначенныйи операция Op, вообщеговоря,коммутативная(рис.внутренней8.17 б)).
вершине,где R - регистр,назначенныйвнутреннейвершине, и операция Op, вообщеговоря,некоммутативная (рис.8.17 б)).говоря,не коммутативная(рис. 8.17R б)).RRRRRRRRRRRRRRRRRRRRR+1R+1R+1R+1R+1R+1RRRXXXXXX(0)(1)(0)б) (1)а)б)(0)а)(1)а)б)а)б)а)б)а)б)Рис. 8.16Рис. 8.17Рис.Рис. Рис. 8.168.16Рис. 8.178.17Если метка правой вершины меньше или равна метке левой вершины, тоЕслиправойтоЕслиметкаметкаправойвершинывершиныменьше илиили равнаравна меткеметке левойлевой вершины,вершины, товершинесоответствуеткод меньшевершинесоответствуеткодвершинесоответствуеткодКод левогоподдереваКодлевогоКодправоголевого поддереваподдереваКодподдереваКодправогоправого поддереваподдереваOpКодR,R+1OpR,R+1Op R,R+1MOVER+1,R MOVEMOVE R+1,RR+1,R137того, чтобы получить результат вПоследняя команда генерируется для137137нужном регистре (в случае коммутативной операции операнды операцииможно поменять местами и избежать дополнительной пересылки)(рис.8.17 а)).
Рассмотрим атрибутную грамматику, реализующую эти правилагенерации кода. В этой атрибутной грамматике генерация кодапроисходит не непосредственно в процессе обхода дерева, как раньше, аиз-за необходимости переставлять поддеревья код строится в виде текста с 1919 2020Таким образом, можно выделить две основные сущности процесса обработки информации: код, как совокупность инструкций, и данные. Всепрограммы в соответствии с выбранной технологией программированияконцептуальноорганизованывокруг своегокода или вокруг своих данных.10.
Основныепринципыобъектно-ориентированногопрограммирования.10. Основныепринципыобъектно-ориентированногоРассмотримосновныена сегодняшнийдень парадигмы программирования: программирования. 1. Процессно-ориентированная парадигма, при которой программаОбъектно-ОриентированноеПрограммирование- это методологияпрограммирования,представляет собой ряд последовательновыполняемыхопераций —котораяоснована на представлениив видесовокупности объектов, каждыймодель фон-Неймана.При этом кодпрограммывоздействуетна данные.10.Основныепринципыобъектно-ориентированногопрограммирования.изкоторыхявляется реализациейопределенногоа классыобразуют иерархию наЯзыки,реализующиеэту парадигму,называются класса,процедурными10.Основныепринципыобъектно-ориентированногопрограммирования.илиимперативными.Такимиязыкамиявляются,например,C,принципах наследования.Pascal и др.этом определении можно выделитьтри части2.
ВОбъектно-ориентированнаяпарадигма,при которой программаОбъектно-Ориентированное Программирование - это методология программирования,рассматриваетсякаксовокупностьфрагментовОбъектно-Ориентированное Программированиекода,- это обрабатыметодология программирования,1.вающихООП используетв совокупностикачествеэлементовконструкцииобъекты,а не алгоритмыкотораяосновананапредставлениипрограммыввидесовокупностиобъектов,*каккаждыйотдельныеданных—объекты.Эти объектыОбъектно-ориентированноепрограммирование(ООП)которая основана на представлении программы в виде совокупностиобъектов, каждыйструктурноепрограммирование+изкоторых являетсяреализациейопределенногоа классывзаимодействуютдругс другом посредствомтак класса,называемыхин- образуют иерархию наиз которых является реализацией определенного класса, а классы образуют иерархию натерфейсов.Приэтомданныеуправляютдоступомккоду.принципах наследования.2.принципахКаждый объектявляется реализацией какого-либо определенного типа (класса)наследования.При повышении сложности алгоритма процессно-ориентированнаяВ этомопределенииможно выделитьтри частипарадигмасталкиваетсяс существеннымипроблемами.3.В Классыорганизованыиерархическиэтомопределенииможновыделитьтри части Переход к объектным принципампрограммированияпозволяетзначительноулучшитьвнут- СмыслЦентральнойидеейООП являетсяреализацияпонятия«абстракция».1.ООПиспользуетвкачествеэлементовконструкцииобъекты,ане алгоритмы *какреннюю Приорганизациюпрограммы,результатечегоповышаетсяпроизво1.ООПиспользуетвхотякачествеэлементовконструкцииобъекты,а не перестаеталгоритмы*как ОО.
(Внесоблюдениибы в1в том,изуказанныхтребованийпрограммаабстракциизаключаетсячто сущностьпроизвольнойсложностибытьструктурноепрограммирование+дительностьприразработкепрограммныхкомплексов.можно рассматривать,а такжепроизводитьопределенныедействиянад ней, Типовструктурноечастностиприпрограммирование+нарушении3 имеемпрограммированиена основеАбстрактныхкакнадединымцелым,невдаваясьвдеталивнутреннегопостроенияНарядус двумявышеизложеннымиосновнымив настоящеевремя па- типа (класса)Данных)2.Каждыйобъектявляется реализациейкакого-либоопределенного2.Каждыйобъектявляетсяреализациейкакого-либоопределенноготипа (класса)ифункционирования.радигмами программирования используются еще две парадигмы:ЯзыкпрограммированияназываетсякомплексаОО тогда инеобходимотолько тогда,когда выполненыКлассыиерархическиПриорганизованысозданииразработатьопре1. 3.Аппликативнаяилипрограммногофункциональная3.Классы организованыиерархически парадигма.