Главная | Случайная
Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






LL(1) - грамматикасы. 3 страница




Альтернативті композицияда бір бағыттауыш стрелка ішкі операторға S1, екіншісі-S2 операторға апарады. Шығатын бағыттауыш стрелкалар осы операторлардың міндетті түрде біреуіне құйылады және олар басқа фрагменттерге кіруге құқықтары болмайды.

Кесте тағы бір оператор сақтайды деп ойлауға болады, ол ешқандай әрекет жасай алмайды.Ол кішкентай квадрат түрінде көрсетіліді.Онда стрелкалар құйылады.Альтернативті композицияның басқа да нұсқалары бар, онда ішкі бір фрагмент бос болып келеді.

Ақырғы композиция циклді. Стрелкалардың бірінің кіруі берілген фрагменттен шарттардың тексерілуінен шығуы болады. Ациклді фрагменттер.Егер фрагментте ешқандай тереңдікте циклді композициямен кезектессе, онда фрагмент ациклді граф болады. Кіретін және шығатын бағыттауыш стрелкалардың жолдары – жай болады. Оларды саны нешеу екені қызықты.

Альтернативті композициялы фрагменттердің жолдарының саны ішкі фрагменттерінің санына тең болып саналады.

Циклді композиция ішкі жағынан бір қарапайым жол қарастырады,ол бір В псевдооператорында цикл алдын ала тексеруші және екі оператордан SB құралған – цикл кейін тексеруші. Мұнда бір қарапайым контур қарастырылады: BSB.Қарапайым жолдардың санын қарастырсақ ең ішкі сапасында болса, онда ол 1-ге тең болады мынадай жағдайда жай жолдардың санының алдын ала және кейін тексеруден кейін.Жай контурлардығ саны – бұл ішкі S фрагмнтінің жай контурының сандары және жай жолдардың осы фрагментте сандарының жатуы.

Базалық жай контурлар схемасы барлық циклді фрагменттерде тұр екені дәлелденген. Осы ішкі Z фрагменттерден ациклді граф және максимальды жолдардан табуға болады. Осындай жолдардың саны z көптігінің элементтерінің санынан көп, сондықтан шарт арқылы әдіс табу керек болады. Қарастырылып отырған графтардың бастысы- операторлар болып саналады.

Бақылау сұрақтары:

1. Тілдің контексті бос емес қасиеттері. Символдар кестесінің ұйымдастыру. Идентификатордың кестесі. Орналастыру кестесі.

2. Тізімді қойылым кестесі. Орналастыру функциясы. Ағаштар кестесі. Блоқтық құрылым.

 

Ұсынылған әдебиеттер:

1. Берн.Э.С. Вопросы теории поисковых систем. М. 1966 г

2. Брауэр В. Введение в теорию конечных автоматов. М. 1987 г

Дәріс № 15 ОБЬЕКТИВТІ КОД ГЕНЕРАТОРЫ. ОБЬЕКТІЛІ КОДТЫ ЫҚШАМДАУ

Мақсты: Жадының түрлерін және код түсінігін ұғындыру

Жоспары:

1. Жады ұйымдастыру. Статикалық және динамикалық жады.

2. Компиляцияның уақыт адресі. Уақытша жады.

3. Кодтың генерациясы. Кодты құру. Үш адресті код. Р – коды. Байт – коды. Машиналық кодты құру.

4. Нұсқаның таңдауы. Регистрлердің үлестіру. Объектті кодтың ықшамдылығы.

Жады ұйымы.

Фундаменталды шешім бірінші РС-ны жобалағанда қабылданған. 8088-ші микропроцессор қолдануы үшін, ол мекендік болу тиіс. Белгілі болғандай, қолданылған IBM PC, PC/XT микропроцессор і8088 өзінің 20 мекендік шині арқылы барлық 1-Мбайттік жадтың кеңестігіне кіре алады.

ІВМ конструкторлары спецификалық мақсатта жадтың арнайы аймағын бөлуді қажет деп тапты. Олар барлық жадты бөлімдерге бөлуді және әрбір бөлім өзінің функциясын таратуға арналған. Нәтижесі диаграмма жадтың картасы деп аталған. РС-ны өндіруде барлық жадтың жартысы резервтелген. Мекендік кеңістіктің жоғарғы жартысы ВІОS кодының мазмұны үшін және жадқа тікелей процессорлық кіруге бөлінген. Алғашқы бірнеше Кбайт система туралы ақпаратқа және негізгі кодтар секциясының орналасуына резервтелген. Олар программаны қамтамасыз ету кезінде орындалады. Бұл жад ұяшықтары үзіліс векторлары деп аталады, ал программалық кодтың функциясы – үзіліс механизмі деп аталады.

Мекендік кеңістіктің аяғында 16 байт номиналымен клавиатура буфері орналасқан. Бұл буфер процессор басқа тапсырманы орындағанда терілген мәтінді сақтау үшін қажет. Тапсырма орындалғаннан кейін бұл мәтін қайта өңделеді. Компьютердің ұнамсыз дыбысы буфердің толғанын және ары қарай басу қажет еместігін көрсетеді. Сонымен қатар, әртүрлі системалық жалаулар, (системалық ішкі жағдайын көрсететін) олар да жадтың төменгі бөлімінде сақталады. Сол кезде компьютерлер 60К жадына ие болғанда 512К жады ғажайып болып көрінеді. Сондықтан 128К программалау қамтамасыз етудің юрисдикциясына беріледі, қалған 384К бастапқы мекендік кеңістік BIOS программасын қолдануға және көру жадына арналды. Бұл шешім 640К стандартты жадты (DOS-қа арналған) шығарды. Бұл программаны орындау кезінде 8088 операция орындай алатын мекендік кеңістіктің жоғарғы мүмкіндігі, кейіннен бұл 640К базалық жад деп аталады, себебі барлық ІВМ біріңғай системалары орын алатын негізгі стандарт болып есептелді.

Статикалық және динамикалық жады.

Осы уақыттта дейін біз программалаудың статикалық деректерді өңдеу жағдайларын қарастырдық.Статикалық шамалар дегеніміз жады компиляция кезінде бөлінетін және барлық жұмыс программасы кезінде сақталатын шамаларды айтады. Паскальда динамикалық деп аталатын басқа әдіс қолданылады. Бұл жағдайда шамалар астындағы жады программаны орындау кезінде шығарылады. Осындай шамаларды динамикалық деп атаймыз. Статикалық таратылған оперативтік жады бөлімі статикалық жады деп, ал динамикалық таратылу бөлімі динамикалық жады деп аталады.

Динамикалық шамаларды қолдану программалаушыға қосымша мүмкіндіктер береді. Біріншіден, динамикалық жадқа қосылу деректерді жаңалаудың көлемін ұлғайтады.

Екіншіден, кейбір деректер программасының аяғына дейін қажет болмаса, онда ол сақталған жадты басқа информация үшін босатуға болады.

Үшіншіден, динамикалық жадты қолдану арқылы деректердің құрылымының өлшемін өзгертуге болады.

Динамикалық шамалармен жұмыс істеу тағы бір деректерді сілтеме түрімен байланысты сілтеме түрдегі деректерді нұсқаулар деп атайды. Нұсқау біртекті типтегі шамаларды сақтайтын динамикалық жадтағы жазықтықтың орнын құрайды.

Статикалық жад Динамикалық жад

 

Нұсқау Шама

 

Шама мекені – бұл жазықтық жадының бірінші байтындағы номері. Жазықтық өлшемі типпен анықталады

Сілтеме типінің шамасы айнымалыларды анықтау бөлімінде төмендегідей анықталады:

Var <идентификатор> := <сілтеме типі>

Паскаль стандартында әрбір нұсқау шаманың тек бір ғана анықталған типіне жібереледі. Бұл нұсқаудың базалық типі. Базалық типтің атауы жазбада мынадай түрде көрсетіледі:

< сілтеме типі > : ^<тип атауы>

Нұсқауды анықтау мысалдары:

 

Type Massiv=Array [1..100] of Integer;

Var P1: ^Integer;

P2: ^Char;

PM: ^Massiv;

 

Мұндағы Р1 – бүтін типтегі динамикалық шамаға нұсқау.

Р2 – белгілік типтегі динамикалық шамаға нұсқау.

РМ – ТУРЕ бөліміндегі динамикалық массивке нұсқау.

Динамикалық шамалардың өздері программада жазылуы талап етпейді, себебі, компиляция кезінде оның астындағы жады білінбейді. Компиляция кезінде тек статикалық шамалардың астындағы жады білінбейді.

Нұсқаулар – бұлар статикалық шамалар, сондықтан жазуда қажет етеді.

Динамикалық жадтың астындағы қандай жағдайда бөлініп шығады? Нұсқаумен байланысқан динмикалық астындағы жады NEW стандартты процедурасының орындалу нәижесінде бөлінеді. Бұл процедураға сұрау салу форматының түрі мынадай:

NEW (<нұсқау>);

Бұл операторда орындағаннан кейін:

<динамикалық шаманың аты>:=<нұсқау>^

түріндегі динамикалық шама құралады деп есептеледі.

Программада NEW(P1); NEW(P2); NEW(PM); операторлары қатысқан болсын. Олар орындалғаннан кейін динамикалық жадта үш шаманың (екі скаляр және бір массив) астындағы орны бөлінбейді. Олардың идентификаторлары мынадай

Р1^,P2^,PM^.

Мысалы, P1^ белгісін былай түсінуге болады: Ол Р1 нұсқауына сілтенетін динамикалық айнымалы болып табылады. Мына суретте көрсетілген схемада, динамикалық шамалар мен олардың нұсқауларының арасындағы байланыс көрсетілген.

 

Статикалық жад Динамикалық жад

Нұсқау Шама

 

Динамикалық айнымалылармен ары қарай жұмыс істеу тура сәйкес типтегі статикалық айнымалылардғы сияқты жүргізіледі. Оларға мынадай мән беруге болады, оларды өрнектерде операнд есебіне иқолдануға болады, сол сияқты параметр астындағы программаларға, тағы сол сияқты жағдайларға қолдануға болады. Мысалы, егер P1^ айнымалысы 25 мәнін иелену қажет болса, P2^ айнымалысы “W” белгінің мәнін иелену қажет болса, ал PM^массиві 1-ден 100-ге дейінгі сандарды ретімен толтыру керек болса, онда бұл былай орындалады:

P1^:=25;

P2^:=’W’;

For I:=1 To 100 Do PM^:={I}:I;

NEW процедурасынан басқа нұсқау мәні иелену оператормен анықталады

<нұсқау> :=<сілтеме өрнек>;

Сілтеме өрнек ретінде мыналарды қолдануға болады:

- Нұсқау

- Сілтеме функциясы (мәні нұсқау болатын функция)

- Ni 1 константасы.

Ni 1 – бұл қосымшаланған константа, ештеңені көрсетпейтін бос сілтемені көрсетеді. Нұсқаудың базалық типін иелену кезінде және сілтеме өрнектер бірдей болуы қажет. Ni 1 константасын кез келген базалық типтегі нұсқауға иеленуге болады.

Сілтеме айнымалының мәнін иеленуге дейін (иелену операторының көмегімен немесе NEW процедурасы арқылы) ол анықталмаған болады.

Кіру және шығу нұсқаулары жіберілмейді

Мысал қарастырайық. Программада төмендегі нұсқаулар жазылған болсын:

Var D,P: ^Integer;

K: ^Boolean;

Онда иелену операторлары D:=P; K:=Ni 1 қолдануға болады. Себебі, сәйкестендіру типінің принципі сақталатын болғандықтан. K:=D операторы қатеб себебі оң және сол бөліктерінің базалық типі әр түрлі. Егер динамикалық шама өзінің нұсқауын жоғалтса, онда ол <<қоқыс>> болады. Программалауда бұл сөздің мағынасы жадты ауыстыратынб бірақ енді керегі жоқ информацияны береді. Егер программада жоғарыда аталған нұсқаулар қатысатын болса, операторлар бөлімінде төмендегідей жазылады:

NEW(D); NEW(Р);

(Екі бүтін айнымалының астындағы динамикалық жадта бөлінген орын. Нұсқаулар сәйкес мәнге ие болады)

D^:=3; P^:=5;

(Динамикалық айнымалыларға мәндер берілді)

P:=D;

{Р және D нұсқаулары 3-ке тең сол шамаға сілтенеді}ю

Writeln (P^,D^);

{3 саны екі рет басылады}

Осындай үлгіде 5-ке тең динамикалық шама, өзінің нұсқауын жоғалтты да кіргізілмейтін болды. Бірақ ол жадтан орын алады. Міне осы <<қоқыстың>> пайда болу мысалы.

Мына суреттегі схемада P:=D операторының орындалу нәтижесіндене болғаны көрсетілген

Болды Қалды

P:=D

       
   
 
 
 

 

 


Паскальда қажетсіз болып қалған, жадты берілгендерден босататын стандарттық процедура бар. Оның форматы:

Dispose (<нұсқау>);

Мысалы, егер Р^ динамикалық айнымалысы керегі жоқ болса, онда Dispose(P) операторы оны жадтан шығарады. Бұдан кейін Р нұсқауының мәні анықталмайды. Әсіресе үлкен массивтерді жоятын жадтарда үнемдеу эффектісі мағыналы болады. MS DOS операциялық системасының басқаруымен жұмыс істейтін Турбо Паскаль нұсқаларында бір программаның астында 64 килобайт жады бөлінеді. Міне осы жадтың статикалық облысы. Үлкен массивті информациялармен жұмыс істегенде бұл аздық етеді. Динамикалық жадтың өлшемі әлдеқайда көп (жүздеген киллобайт). Сондықтан динамикалық деректермен жұмыс істеу программаның орындалуын тежейді. Шамаға кіру 2 қадамға жүзеге асадыЖ алдымен нұсқау ізделеді, содан кейін шама сол бойынша табылады. Үнемі болатын <<келеңсіздіктің сақталу заңы>> орындалады; Жадтағы ұтыс уақытындағы ұтылыспен қорландырады.

1 мысал. 10 000 сандардан заттық массив құру керек. 0-ден 1-ге дейінгі диапазонда оларды кездейсоқ сандармен толтыру қажет. Массивтің орташа мәнін есептеу керек. Динамикалық жадты тазалау керек. 100-ден 100-ге дейінгі диапазонда бүтін кездейсоқ сандармен толтыру керек, және оның орташа мәнін есептеу керек.

Program Sr;

Const NMax=10000;

Type Diapazon=1..NMax;

MasInt=Array[Diapazon] of Integer;

MasReal=Array[Diapazon] of Real;

Var PIint: ^N|MasInt;

PReal: ^MasInt;

I, Miding: LongInt;

MidReal : Real;

Begin

MidReal:=0; MidInt:=0;

Randomize;

NEW (PReal);

{Заттық массивтің астындағы жадтың бөлінуі}

{Массивтің қосындысы және есептенуі}

For I:=1 To NMax Do

Begin PReal^[I]:=Random;

MidReal:=MidReal+PReal^[I]

End;

Dispose (PReal); {Заттық массивті жою}

NEW (PInt); {Бүтін массивтің астындағы жадтың бөлінуі}

{Бүтін массивтің қосындысы мен есептеуі}

For I:=1 To NMax Do

Begin

PInt^[I]:=Random (200)-100;

MidInt:=MidInt6+PInt^[I]

End;

{Орташа мәннің қорытындысы}

Writeln{‘Орташа мән тең:’,MidInt Div Max};

Writeln(‘Орташа шама тең:’,(MidReal/NMax):10:6);

End.

Байланысқан тізімдер.

Мынадай сұрақты қарастырайық:

Динамикалық жадқа айнымалы өлшемдегі берілгендердің құрылымын қалай құрау керектігін келесі мысалда талдайық. Физикалық эксперименттер процесінде құралдардың көрсетілуі бірнеше рет анықталады және ары қарай өңдеу үшін компьютер жадына жазылады. Алдын ала қанша өлшем жүргізілетіні белгісіз .

Егер мұндай берілгендерді өңдеу үшін ішкі жадты (файлдарды) қолданбасақ, онда динамикалық жадта мұны дұрыстап орналастыра аламыз. Біріншіден, динамикалық жад статикалық жадқа қарағанда үлкен информациялар көлемін сақтауға мүмкіндік береді. Екіншіден, динамикалық жадқа бұл сандарды байланысқан тізімдерде ұйымдастыруға болады. Себебі, массивке ұқсас сандардың мөлшерін қосымша қажет етпейді. Байланысқан тізім дегеніміз не? Схемалық түрде оны былай көрсетеді:

 
 

 

 


Тізімдегі әрбір элемент екі бөліктен тұрады: информациялық бөлік ( P2,P3 және т.с.с. ) және тізімнің келесі элементін нұсқау бөлігі. (X1,X2 және т.с.с.) Соңғы элемент бос нұсқауды көрсетеді: Ni 1. Осындай типтегі байланысқан бір бағыттағы тізбек деп аталады. Жоғарыдағы тұжырымдалған есептің информациялық бөлігі берілген заңдар тізімі:

X1 - бірінші өлшеу нәтижесі,

X2 - екінші өлшеу нәтижесі,

сол сияқты X4–соңғы өлшеу нәтижесі. Байланысқан тізімнің ерекше қасиеті бар, оны информация түскен сайын толықтырып отыруға болады. Толықтыру тізімнің соңына жаңа элементті тіркеу негізінде жүргізімді.

Ni 1 мәні соңғы элементте тізбектің жаңа элементіне сілтемемен ауыстырылады:

 
 

 


Байланысқан тізім артық жадтан орын алмайды. Түскен информацияға қажетті жағдай бойынша жады сондай көлемде шығындалады. Программада тізбек элементтерін ұсыну мақсатында араласқан тип қолданылады. Біздің мысал үшін мұндай элементтің үлгісі мынадай болуы мүмкін:

Type Pe=^Elem;

Elem=Record

T: Real;

P: Pe

End;

 

Мұндағы, Ре – Elem айнымалы типіне сілтеме типі. Осы атпен екі жазықтан тұратын аралас тип белгіленген. Оның біріншісі: Т – заттық шама, температурасы сақталған, Р – Elem динамикалық типіне нұсқау. Мұндай жазбада Паскальдың негізгі принциптерінің бірі бұзылған. Кез келген программалық объектке оның жазбасынан кейін сілтеме жасауға болады. Негізінен, Ре типі Elem типі арқылы анықталады. Бірақ Паскальда сілтеме типі мен байланысты, бұл ережеден тыс жалғыз мүмкіндік бар. Программаның келтірілген фрагменті дұрыс болып табылады.

2 Мысал:

Type Pe=^TypElem;

TypElem=Record

T:Real; P: Pe

End;

Var Elem, Beg: Pe;

X: Real; Ch: Char;

Begin {Тізімнің алғашқы мекенінің анықтамасы}

NEW (Elem); Beg:=Elem;

Elem^.P:=Elem;

{Тізімге кіргізу мәндерінің диалогтық кірісі және элементтер арасындағы байланыс ұйымы}

While Elem^ . P<>Nil Do

Begin

Write (‘Санды енгізіңіз’);

ReadLn (Elem^ . T);

Write (‘Кіруді қайталау? (N/Y)’);

ReadLn (Ch);

If (Ch=’n’) or (Ch=’N’)

Then Elem^ . P:=Nil

Else Begin

NEW (Elem^.P);

Elem:=Elem^.P

End

End;

WriteLn(<<Берілгендерді кіргізу>>);

{Алынған санды тізбектердің қорытындысы}

WriteLn (<<Бақылап шығару>>);

Elem:=Beg;

Repeat

WriteLn (N,’:’,Elem^.T:8:3);

Elem:=Elem^.P

Until Elem=Nil

End.

Beg айнымалы сілтеме тізбектің алғашқы мекенін сақтау үшін қолданылады. Тізбекті әрқалай өңдеу оның бірінші элементінен басталады. Программада өңдеу кезінде тізбектің қалай жүргізілетіндігі көрсетілген. (Берілген мысалда тізімнің информациялық бөлігін рет бойынша басылған). Бір бағытта тізбек – байланысқан тізімнің қарапайым нұсқасы. Программалау практикасында екібағытты тізбектер қолданылады. (әрбір элемент тізімнің келесі элементтеріне нұсқау сақтайды) Осындай берілгендер құрылымдар деп аталады.

Код генерациясының ақпараттық ұйымы.

Объективті код генерациясы – бұл ішкі командаларды аударумен және шығару программаларын енгізу тізбегіндегі символдармен түсіндіреді. Объекттік код генерациясы ассемблер тілінде программаны құруда немесе машиналық тілде құруды айтады. Программа ішінің анықтамасы әртүрлі құрылымнан тұруы мүмкін. Сондықтан объектік кодтың генерациясы барлық жағдайда іс - әрекетті орындау керек. Ол сызықтық тізбекте синтаксистік құрылымның қиындығынан туындайды. Код генерациясы функция деп атауға болады. Егер ол синтаксистік ағашта информациялар берсе. Ол идентификатор таблицасында беріледі. Сондықтан объектік кодтың генерациясы орындалғаннан соң программа синтаксистік анализінің қалай орындалғанын және код генерациясына дайындаудың барлық іс- әрекетті орындау керек: Ауыспалы функцияда кеңістік адресі анықталған, ауыспалы типтерде аттары анықталған, констант және шығару программаның синтаксистік конструкциясы берілген. Негізгі программаның принциптері командаларға генерацияларға енгізу тілдеріне есептеуіш жүйенің архитектурасына байланысты. Компилятор синтаксистік енгізілген программаларды орындайды. Содан соң оны семантикалық анализге көшіреді, код генерациясына дайындайды. Сондықтан мұндай компилятор жұмысының схемасы практикада қолданылады. Мәселен бұл жағдайда бір семантикалық анализаторда және бір компиляторда енгізу программасы бүтін түрде келеді. Ереже бойынша компилятор код генерациясые этап бойынша орындайды. Компилятор енгізу программасының текстік синтаксистік конмтрукциясында аяқтайды. Содан соң ол келесі синтаксистік констукцияға келеді. Сонымен барлық енгізілген программа өңдегенше осылай жалғаса береді. Синтаксистік конструкцияның әрбір мағынасын енгізу тілінде анықтауға болады. Оның типін синтансистік анализаторын айқындайды. Мұндай типтерге циклдік оператор, шартты оператор, таңдау операторлары қолданылады. Мұндай типтер синтаксистік конструкциясында программалау тілінде белгілі бір мағына береді. Компилятор енгізу тіліндегі синтаксистік басқару әдісі қолданылады. Бұл әдіс ыңғайлы болу үшін синтаксистік ыңғайды қолданамыз. СУ ауысуының прициптері келесідегідей. Әрбір ағаштың биіктігінде синтаксистік өңдеуде N тізбегі C(N) аралық кодында беріледі. Өз кезегімен ол N биіктігінде кодтарды құруды және N биіктігінің деңгейінде табылады. Бұл процесс төменне жоғары қарай ретімен орындалады. СУ аударуын құру үшін берілген синтаксистік ағашта түпкі ағашты табу керек. Сондықтан әрбір ағаш биіктігі код тізбегін туындатады. Жалпы жағдайда код интерпретациясын алу үшін N биіктігінен C(N)-ді белгілейміз. Бұл принцип бойынша бұл есептің өзіндік мағынасы бар. СУ аударуын қолдану үшін код интерпретациясының есебі әрбір ағаш биікігіне сәйкес келуі керек. Компилятор моделі беріледі, егер синтаксистік анализде енгізу программасы және код генерациясы нәтижелі болса. СУ компиляциясының схемасын программалау тілін енгізгенде көруге болады. Егер СУ аударуының принципі КС тілінде енгізілсе, онда СУ командасын қолдану мүмкін болады. Жалпы жағдайда СУ аударуының схемасы келесі әрекеттермен орындалады:

v Берілген машиналық клдта немесе ассемблер тілінде компилятор жұмысының нәтижесі.

v Табылған қателерді және есептеулерді енгізу тізбегінен шығару.

v Туынды және командаларды орындау.

Программаны орындаудың ішкі әдістері.

Компиляторда шығару программасын синтаксистік конструкциясында орындау мүмкіндіктері бірнеше этаптардан тұрады. Этаптарда қолданылатын синтаксистік анализдер жұмыс генерациясында және объектік код оптимизациясында өте ыңғайсыз. Сондықтан операцияда объекті кодты генерациясында программаны таңдау тізбек формасына сәйкес келеді. Программаның барлық ішкі туындысы екі принцип бойынша орындалады. Оператордажәне операндыда.Бұл екі форманың арасындағы айырмашылықтары жоқ. Қалай операторда орындалса, солай операндыда орындалады. Бұл екеуі өте тығыз байланысты. Сонымен қатар оператор және операндылар бір бірінен ажыратылуы керек. Егер олар әр түрлі ретте кездессе, операторлар және операндылардың мағынасы жоғарыда айтылғандай компьютерде өңдеумен байланысты. Олардың келесі формалары белгілі:

v Байланысты тізбекті құрылым

v Көп адресті код және нәтижесі

v Көп адресті код және нәтижесіз

v Қайтымды операцияларды жазу

v Ассемблер және машиналық код

Әрбір нақты кодта бұл формалардың біреуі қолданылуы мүмкін. Бірақ жиі жағдайда компьютерде бұл формалардың біреуі ғана кездеспейді. Кейбір компьютерлер нәтижелі код береді. Жалпы жағдайда СУ компиляциясында схема қолданылады. Олар синтаксистік өңдеудің фазалары, семантикалық анализдер, объекті кодың генерациясы. Сонда ішкі программада келесі алгоритмдер қадамы орынды. Барлық жағдайда компьютерлер әрқашан машиналық командалармен жұмыс жасай алады.

Кодтарды құру. Үш адресті код.

Код дегеніміз – белгілердің, символдардың ақпаратты берудің ережелерінің жиынтығы.




Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2019 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных