Главная » Просмотр файлов » В.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006)

В.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006) (1134633), страница 29

Файл №1134633 В.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006) (В.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006)) 29 страницаВ.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006) (1134633) страница 292019-05-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 29)

Òîãäà ñåìàíòèêà ïðàâèëà äëÿñïèñêà îáúÿâëåíèé ïðèíèìàåò âèäRULEDeclPart ::= ( Decl )SEMANTICSDisp<1>=0;1A: Disp<1>=Disp<1>+Size<1>;Size<0>=Disp<1>.Âñå îáúÿâëåíèÿ, êðîìå îáúÿâëåíèé ïåðåìåííûõ, èìåþòíóëåâîé ðàçìåð. Ðàçìåð îáúÿâëåíèÿ ïåðåìåííîé îïðåäåëÿåòñÿ ñëåäóþùèì ïðàâèëîì:RULEDecl ::= 'VAR' TypeDesSEMANTICSTablentry Entry;0: Entry=IncTab;Size<0>=((Table[VAL<2>]+1) / 2)*2;// Âûðàâíèâàíèå íà ãðàíèöó ñëîâàTable[Entry]=Disp<0>+Size<0>. êà÷åñòâå ïðèìåðà òðàíñëÿöèè îïðåäåëåíèÿ òèïà ðàññìîòðèì îáðàáîòêó îïèñàíèÿ çàïèñè:9.4. Òðàíñëÿöèÿ ïåðåìåííûõ211RULETypeDes ::= 'REC' ( TypeDes ) 'END'SEMANTICSint Disp;Tablentry Temp;0: Entry<0>=IncTab;Disp=0;2A: {Temp=IncTab;Table[Temp]=Disp;Disp=Disp+Table[Entry<2>]+1) / 2)*2;// Âûðàâíèâàíèå íà ãðàíèöó ñëîâà}Table[Entry<0>]=Disp.9.4.

Òðàíñëÿöèÿ ïåðåìåííûõÏåðåìåííûå îòðàæàþò âñ¼ ìíîãîîáðàçèå ìåõàíèçìîâäîñòóïà â ÿçûêå. Ïåðåìåííàÿ èìååò ñèíòåçèðîâàííûé àòðèáóò ADDRESS ýòî çàïèñü, îïèñûâàþùàÿ àäðåñ â êîìàíäå ÌÑ68020. Ýòîò àòðèáóò ñîïîñòàâëÿåòñÿ âñåì íåòåðìèíàëàì, ïðåäñòàâëÿþùèì çíà÷åíèÿ.  ñèñòåìå êîìàíäÌÑ68020 ìíîãî ñïîñîáîâ àäðåñàöèè, è îíè îòðàæåíû âñòðóêòóðå çíà÷åíèÿ àòðèáóòà ADDRESS, èìåþùåãî ñëåäóþùèé òèï:enum Register{D0,D1,D2,D3,D4,D5,D6,D7,A0,A1,A2,A3,A4,A5,A6,SP,NO};enum AddrMode{D,A,Post,Pre,Indirect,IndPre,IndPost,IndirPC,IndPrePC,IndPostPC,InDisp,Index,IndexPC,Abs,Imm};struct AddrType{Register AddrReg,IndexReg;int IndexDisp,AddrDisp;short Scale;};212Ãëàâà 9. Ãåíåðàöèÿ êîäàÇíà÷åíèå ðåãèñòðà NO îçíà÷àåò, ÷òî ñîîòâåòñòâóþùèéðåãèñòð â àäðåñàöèè íå èñïîëüçóåòñÿ.Äîñòóï ê ïåðåìåííûì îñóùåñòâëÿåòñÿ â çàâèñèìîñòè îòèõ óðîâíÿ: ãëîáàëüíûå ïåðåìåííûå àäðåñóþòñÿ ñ ïîìîùüþàáñîëþòíîé àäðåñàöèè; ïåðåìåííûå â ïðîöåäóðå òåêóùåãîóðîâíÿ àäðåñóþòñÿ ÷åðåç ðåãèñòð áàçû À6.Åñëè ñòåê îðãàíèçîâàí ñ ïîìîùüþ ñòàòè÷åñêîé öåïî÷êè, òî ïåðåìåííûå ïðåäûäóùåãî ñòàòè÷åñêîãî óðîâíÿ àäðåñóþòñÿ ÷åðåç ðåãèñòð ñòàòè÷åñêîé öåïî÷êè À5; ïåðåìåííûåîñòàëüíûõ óðîâíåé àäðåñóþòñÿ ¾ïðîáåãàíèåì¿ ïî ñòàòè÷åñêîé öåïî÷êå ñ èñïîëüçîâàíèåì âñïîìîãàòåëüíîãî ðåãèñòðà.Àäðåñ ïåðåìåííîé ôîðìèðóåòñÿ ïðè îáðàáîòêå ñòðóêòóðû ïåðåìåííîé ñëåâà íàïðàâî è ïåðåäà¼òñÿ ñíà÷àëà ñâåðõóâíèç êàê íàñëåäóåìûé àòðèáóò íåòåðìèíàëà VarTail, à çàòåì ïåðåäà¼òñÿ ñíèçó-ââåðõ êàê ãëîáàëüíûé àòðèáóò íåòåðìèíàëà Variable.

Òàêèì îáðàçîì, ïðàâèëî äëÿ îáðàùåíèÿê ïåðåìåííîé èìååò âèä (ïåðâîå âõîæäåíèå Number â ïðàâóþ ÷àñòü ýòî óðîâåíü ïåðåìåííîé, âòîðîå å¼ Ëèäåðíîìåð):RULEVariable ::= VarMode Number Number VarTailSEMANTICSint Temp;struct AddrType AddrTmp1, AddrTmp2;3: if (Val<2>==0) // Ãëîáàëüíàÿ ïåðåìåííàÿ{Address<4>.AddrMode=Abs;Address<4>.AddrDisp=0;}else // Ëîêàëüíàÿ ïåðåìåííàÿ{Address<4>.AddrMode=Index;if (Val<2>==Level<Block>) // Ïåðåìåííàÿ// òåêóùåãî óðîâíÿAddress<4>.AddrReg=A6;else if (Val<2>==Level<Block>-1)// Ïåðåìåííàÿ ïðåäûäóùåãî óðîâíÿAddress<4>.AddrReg=A5;else9.4.

Òðàíñëÿöèÿ ïåðåìåííûõ213{Address<4>.Addreg=GetFree(RegSet<Block>);AddrTmp1.AddrMode=Indirect;AddrTmp1.AddrReg=A5;Emit2(MOVEA,AddrTmp1,Address<4>.AddrReg);AddrTmp1.AddrReg=Address<4>.AddrReg;AddrTmp2.AddrMode=A;AddrTmp2.AddrReg=Address<4>.AddrReg;for (Temp=Level<Block>-Val<2>;Temp>=2;Temp--)Emit2(MOVEA,AddrTmp1,AddrTmp2);}if (Val<2>==Level<Block>)Address<4>.AddrDisp=Table[Val<3>];elseAddress<4>.AddrDisp=Table[Val<3>]+Table[LevelTab[Val<2>]];}.Ôóíêöèÿ GetFree âûáèðàåò î÷åðåäíîé ñâîáîäíûé ðåãèñòð (ëèáî ðåãèñòð äàííûõ, ëèáî àäðåñíûé ðåãèñòð) è îòìå÷àåò åãî êàê èñïîëüçîâàííûé â àòðèáóòå RegSet íåòåðìèíàëà Block.

Ïðîöåäóðà Emit2 ãåíåðèðóåò äâóõàäðåñíóþêîìàíäó. Ïåðâûé ïàðàìåòð ýòîé ïðîöåäóðû êîä êîìàíäû, âòîðîé è òðåòèé ïàðàìåòðû èìåþò òèï AddrType è ñëóæàò îïåðàíäàìè êîìàíäû. Ñìåùåíèå ïåðåìåííîé òåêóùåãîóðîâíÿ îòñ÷èòûâàåòñÿ îò áàçû (À6), à äðóãèõ óðîâíåé îòóêàçàòåëÿ ñòàòè÷åñêîé öåïî÷êè, ïîýòîìó îíî îïðåäåëÿåòñÿ êàê àëãåáðàè÷åñêàÿ ñóììà ðàçìåðà ëîêàëüíûõ ïàðàìåòðîâ è âåëè÷èíû ñìåùåíèÿ ïåðåìåííîé. Òàáëèöà LevelTab ýòî òàáëèöà óðîâíåé ïðîöåäóð, ñîäåðæàùàÿ óêàçàòåëè íàïîñëåäîâàòåëüíî âëîæåííûå ïðîöåäóðû.Åñëè ñòåê îðãàíèçîâàí ñ ïîìîùüþ äèñïëåÿ, òî òðàíñëÿöèÿ äëÿ äîñòóïà ê ïåðåìåííûì ìîæåò áûòü îñóùåñòâëåíàñëåäóþùèì îáðàçîì:RULE214Ãëàâà 9. Ãåíåðàöèÿ êîäàVariable ::= VarMode Number Number VarTailSEMANTICSint Temp;3: if (Val<2>==0) // Ãëîáàëüíàÿ ïåðåìåííàÿ{Address<4>.AddrMode=Abs;Address<4>.AddrDisp=0;}else // Ëîêàëüíàÿ ïåðåìåííàÿ{Address<4>.AddrMode=Index;if (Val<2>=Level<Block>) // Ïåðåìåííàÿ// òåêóùåãî óðîâíÿ{Address<4>.AddrReg=A6;Address<4>.AddrDisp=Table[Val<3>];}else{Address<4>.AddrMode=IndPost;Address<4>.AddrReg=NO;Address<4>.IndexReg=NO;Address<4>.AddrDisp=Display[Val<2>];Address<4>.IndexDisp=Table[Val<3>];}}.Ðàññìîòðèì òðàíñëÿöèþ äîñòóïà ê ïîëÿì çàïèñè.

Îíàîïèñûâàåòñÿ ñëåäóþùèì ïðàâèëîì (Number ýòî Ëèäåðíîìåð îïèñàíèÿ ïîëÿ):RULEVarTail ::= 'FIL' Number VarTailSEMANTICSif (Address<0>.AddrMode==Abs){Address<3>.AddrMode=Abs;Address<3>.AddrDisp=Address<0>.AddrDisp+Table[Val<2>];}else{Address<3>=Address<0>;if (Address<0>.AddrMode==Index)Address<3>.AddrDisp=9.5. Òðàíñëÿöèÿ öåëûõ âûðàæåíèé215Address<0>.AddrDisp+Table[Val<2>];elseAddress<3>.IndexDisp=Address<0>.IndexDisp+Table[Val<2>];}.9.5.

Òðàíñëÿöèÿ öåëûõ âûðàæåíèéÒðàíñëÿöèÿ âûðàæåíèé ðàçëè÷íûõ òèïîâ óïðàâëÿåòñÿñèíòàêñè÷åñêè áëàãîäàðÿ íàëè÷èþ óêàçàòåëÿ òèïà ïåðåäêàæäîé îïåðàöèåé. Ìû ðàññìîòðèì íåêîòîðûå íàèáîëåå õàðàêòåðíûå ïðîáëåìû ãåíåðàöèè êîäà äëÿ âûðàæåíèé.Ñèñòåìà êîìàíä ÌÑ68020 îáëàäàåò äâóìÿ îñîáåííîñòÿìè, ñêàçûâàþùèìèñÿ íà ãåíåðàöèè êîäà äëÿ àðèôìåòè÷åñêèõ âûðàæåíèé (òî æå ìîæíî ñêàçàòü è î ãåíåðàöèè êîäàäëÿ âûðàæåíèé òèïà ¾ìíîæåñòâà¿):1) îäèí èç îïåðàíäîâ âûðàæåíèÿ (ïðàâûé) äîëæåí ïðèâûïîëíåíèè îïåðàöèè íàõîäèòüñÿ íà ðåãèñòðå, ïîýòîìó åñëè îáà îïåðàíäà íå íà ðåãèñòðàõ, òî ïåðåä âûïîëíåíèåìîïåðàöèè îäèí èç íèõ íàäî çàãðóçèòü íà ðåãèñòð;2) ñèñòåìà êîìàíä äîâîëüíî ¾ñèììåòðè÷íà¿, òî åñòü íåòñïåöèàëüíûõ òðåáîâàíèé ê ðåãèñòðàì ïðè âûïîëíåíèè îïåðàöèé (òàêèõ, íàïðèìåð, êàê ïàðû ðåãèñòðîâ èëè òðåáîâàíèÿ ÷¼òíîñòè è ò.ä.).Ïîýòîìó âûáîð êîìàíä ïðè ãåíåðàöèè àðèôìåòè÷åñêèõâûðàæåíèé îïðåäåëÿåòñÿ äîâîëüíî ïðîñòûìè òàáëèöàìèðåøåíèé.

Íàïðèìåð, äëÿ öåëî÷èñëåííîãî ñëîæåíèÿ òàêàÿòàáëèöà ïðèâåäåíà íà ðèñ. 9.4.Çäåñü èìååòñÿ â âèäó, ÷òî R îïåðàíä íà ðåãèñòðå, V ïåðåìåííàÿ èëè êîíñòàíòà. Òàêàÿ òàáëèöà ðåøåíèé äîëæíàòàêæå ó÷èòûâàòü êîììóòàòèâíîñòü îïåðàöèé.RULEIntExpr ::= 'PLUS' IntExpr IntExprSEMANTICSif (Address<2>.AddrMode!=D) &&(Address<3>.AddrMode!=D)216Ãëàâà 9. Ãåíåðàöèÿ êîäàËåâûéîïåðàíäA1RÏðàâûé îïåðàíä À2RVADD A1,A2 ADD A2, A1VADD A1, A2MOVE A1, RADD A2, RÐèñ. 9.4.{Address<0>.AddrMode=D;Address<0>.Addreg=GetFree(RegSet<Block>);Emit2(MOVE,Address<2>,Address<0>);Emit2(ADD,Address<2>,Address<0>);}elseif (Address<2>.AddrMode==D){Emit2(ADD,Address<3>,Address<2>);Address<0>:=Address<2>);}else {Emit2(ADD,Address<2>,Address<3>);Address<0>:=Address<3>);}.9.6.

Òðàíñëÿöèÿâûðàæåíèéàðèôìåòè÷åñêèõÎäíîé èç âàæíåéøèõ çàäà÷ ïðè ãåíåðàöèè êîäà ÿâëÿåòñÿ ðàñïðåäåëåíèå ðåãèñòðîâ. Ðàññìîòðèì õîðîøî èçâåñòíóþ òåõíèêó ðàñïðåäåëåíèÿ ðåãèñòðîâ ïðè òðàíñëÿöèè àðèôìåòè÷åñêèõ âûðàæåíèé, íàçûâàåìóþ àëãîðèòìîìÑåòè-Óëüìàíà. (Çàìå÷àíèå: â öåëÿõ áîëüøåé íàãëÿäíîñòè,â äàííîì ïàðàãðàôå ìû íåìíîãî îòñòóïàåì îò ñåìàíòèêèàðèôìåòè÷åñêèõ êîìàíä MC68020 è ïðåäïîëàãàåì, ÷òî êîìàíäàOp Arg1, Arg29.6.

Òðàíñëÿöèÿ àðèôìåòè÷åñêèõ âûðàæåíèé217âûïîëíÿåò äåéñòâèå Arg2:=Arg1 Op Arg2.)Ïóñòü ñèñòåìà êîìàíä ìàøèíû èìååò íåîãðàíè÷åííîå÷èñëî óíèâåðñàëüíûõ ðåãèñòðîâ, â êîòîðûõ âûïîëíÿþòñÿàðèôìåòè÷åñêèå êîìàíäû. Ðàññìîòðèì, êàê ìîæíî ñãåíåðèðîâàòü êîä, èñïîëüçóÿ äëÿ äàííîãî àðèôìåòè÷åñêîãî âûðàæåíèÿ ìèíèìàëüíîå ÷èñëî ðåãèñòðîâ.RS5RS5RS/55QRS/5Ðèñ. 9.5.Ïóñòü èìååòñÿ ñèíòàêñè÷åñêîå äåðåâî âûðàæåíèÿ.

Ïðåäïîëîæèì ñíà÷àëà, ÷òî ðàñïðåäåëåíèå ðåãèñòðîâ îñóùåñòâëÿåòñÿ ïî ïðîñòåéøåé ñõåìå ñâåðõó-âíèç ñëåâà-íàïðàâî,êàê èçîáðàæåíî íà ðèñ. 9.5. Òîãäà ê ìîìåíòó ãåíåðàöèè êîäà äëÿ ïîääåðåâà LR çàíÿòî n ðåãèñòðîâ. Ïóñòü ïîääåðåâîL òðåáóåò nl ðåãèñòðîâ, à ïîääåðåâî R nr ðåãèñòðîâ. Åñëènl = nr , òî ïðè âû÷èñëåíèè L áóäåò èñïîëüçîâàíî nl ðåãèñòðîâ è ïîä ðåçóëüòàò áóäåò çàíÿò (n + 1)-é ðåãèñòð. Åù¼nr (= nl ) ðåãèñòðîâ áóäåò èñïîëüçîâàíî ïðè âû÷èñëåíèè R.Òàêèì îáðàçîì, îáùåå ÷èñëî èñïîëüçîâàííûõ ðåãèñòðîâ áóäåò ðàâíî n + nl + 1.Åñëè nl > nr , òî ïðè âû÷èñëåíèè L áóäåò èñïîëüçîâàíî nl ðåãèñòðîâ. Ïðè âû÷èñëåíèè R áóäåò èñïîëüçîâàíî nr < nl ðåãèñòðîâ, è âñåãî áóäåò èñïîëüçîâàíî íå áîëåå÷åì n + nl ðåãèñòðîâ. Åñëè nl < nr , òî ïîñëå âû÷èñëåíèÿL ïîä ðåçóëüòàò áóäåò çàíÿò îäèí ðåãèñòð (ïðåäïîëîæèì,(n + 1)-é) è nr ðåãèñòðîâ áóäåò èñïîëüçîâàíî äëÿ âû÷èñëå-218Ãëàâà 9.

Ãåíåðàöèÿ êîäàíèÿ R. Âñåãî áóäåò èñïîëüçîâàíî n + nr + 1 ðåãèñòðîâ.Âèäíî, ÷òî äëÿ äåðåâüåâ, ñîâïàäàþùèõ ñ òî÷íîñòüþ äîïîðÿäêà ïîòîìêîâ êàæäîé âåðøèíû, ìèíèìàëüíîå ÷èñëîðåãèñòðîâ ïðè ðàñïðåäåëåíèè èõ ñëåâà-íàïðàâî äîñòèãàåòñÿíà äåðåâå, ó êîòîðîãî â êàæäîé âåðøèíå ñëåâà ðàñïîëîæåíî áîëåå ¾ñëîæíîå¿ ïîääåðåâî, òðåáóþùåå áîëüøåãî ÷èñëàðåãèñòðîâ. Òàêèì îáðàçîì, åñëè äåðåâî òàêîâî, ÷òî â êàæäîé âíóòðåííåé âåðøèíå ïðàâîå ïîääåðåâî òðåáóåò ìåíüøåãî ÷èñëà ðåãèñòðîâ, ÷åì ëåâîå, òî, îáõîäÿ äåðåâî ñëåâàíàïðàâî, ìîæíî îïòèìàëüíî ðàñïðåäåëèòü ðåãèñòðû.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее