Studopediya

КАТЕГОРИЯ:


Астрономия- (809) Биология- (7483) Биотехнологии- (1457) Военное дело- (14632) Высокие технологии- (1363) География- (913) Геология- (1438) Государство- (451) Демография- (1065) Дом- (47672) Журналистика и СМИ- (912) Изобретательство- (14524) Иностранные языки- (4268) Информатика- (17799) Искусство- (1338) История- (13644) Компьютеры- (11121) Косметика- (55) Кулинария- (373) Культура- (8427) Лингвистика- (374) Литература- (1642) Маркетинг- (23702) Математика- (16968) Машиностроение- (1700) Медицина- (12668) Менеджмент- (24684) Механика- (15423) Науковедение- (506) Образование- (11852) Охрана труда- (3308) Педагогика- (5571) Полиграфия- (1312) Политика- (7869) Право- (5454) Приборостроение- (1369) Программирование- (2801) Производство- (97182) Промышленность- (8706) Психология- (18388) Религия- (3217) Связь- (10668) Сельское хозяйство- (299) Социология- (6455) Спорт- (42831) Строительство- (4793) Торговля- (5050) Транспорт- (2929) Туризм- (1568) Физика- (3942) Философия- (17015) Финансы- (26596) Химия- (22929) Экология- (12095) Экономика- (9961) Электроника- (8441) Электротехника- (4623) Энергетика- (12629) Юриспруденция- (1492) Ядерная техника- (1748) Arhitektura- (3434) Astronomiya- (809) Biologiya- (7483) Biotehnologii- (1457) Военни бизнесмен (14632) Висока technologies- (1363) Geografiya- (913) Geologiya- (1438) на държавата (451) Demografiya- ( 1065) Къща- (47672) журналистика и смирен (912) Izobretatelstvo- (14524) външен >(4268) Informatika- (17799) Iskusstvo- (1338) историята е (13644) Компютри- (11,121) Kosmetika- (55) Kulinariya- (373) културата е (8427) Lingvistika- (374) Literatura- (1642) маркетинг-(23702) математиците на (16968) Механична инженерно (1700) медицина-(12668) Management- (24684) Mehanika- (15423) Naukovedenie- (506) образователна (11852) truda- сигурност (3308) Pedagogika- (5571) Poligrafiya- (1312) Politika- (7869) Лево- (5454) Priborostroenie- (1369) Programmirovanie- (2801) производствено (97 182 ) индустрия- (8706) Psihologiya- (18388) Religiya- (3217) Svyaz (10668) Agriculture- (299) Sotsiologiya- (6455) на (42831) спортист строително (4793) Torgovlya- (5050) транспорт ( 2929) Turizm- (1568) физик (3942) Filosofiya- (17015) Finansy- (26596) химия (22929) Ekologiya- (12095) Ekonomika- (9961) Electronics- (8441) Elektrotehnika- (4623) Мощност инженерно ( 12629) Yurisprudentsiya- (1492) ядрена technics- (1748)

разбор на дърво. Трансформиране синтактична дърво с операции дърво




Синтаксис дървета

Синтаксис дърво (дървото на операциите) - структура, която е в резултат на анализатора. Той отразява вход език синтаксис и изгражда изрично съдържа операции пълните взаимно свързване.

вътрешни възли синтаксис дърво (върховете) съответстват на операциите, и листата са операнди. Обикновено листата на синтаксиса на дърветата са свързани с записи в таблицата със символи. синтаксис дървовидна структура отразява синтаксиса на програмния език на който е написан на изходния код.

Синтаксис дърво може да бъде конструиран от компилатора за всеки от входящите програмата. Тя не винаги е разбор дърво трябва да съвпада с код фрагмент от получената програма - например, е възможно да се изгради декларативни синтактични дървета за езика. В този случай, операциите са на разположение в дървото, не се нуждаят от поколението на обектен код, но съдържа информация за дейностите, които се извършват от компилатора на съответните елементи. В случая, когато дървото синтаксис съответства на някаква последователност от операции, които водят до генериране на фрагмент от кода на обект, казват дърво операции.

операции дърво може да бъде директно изградени от изхода на дървото, генерирани от парсера. Това е достатъчно, за да се изключат от дърво изход веригата на nonterminal символи, както и сайтове, които не са носители на семантична (което означава) натоварване при генериране на код. Примери за такива сайтове могат да обслужват различни скоби, които се променят по реда на операциите и оператори, но след построяването на дървото не семантично натоварване не са, защото те не отговарят на всеки обект код.

Това, което възел в дървото е операция, и което - на операнд не може да се определи от граматика който описва синтаксиса вход. Също така не трябва да бъде никъде, някои операции трябва да се съобразяват с получената обект код в програмата, и какво - не. Всичко това се определя само въз основа на семантиката - "смисъл" - програма език източник. Ето защо, само на разработчика компилатор може ясно да се дефинира като в изграждането на операциите на дърветата трябва да бъдат различни операнди и самите операции, а също и какви действия са семантично безсмислени за генериране на кода на обект.

Дърво алгоритъм преобразуване в O операции дърво:

1). Ако дървото е вече не съдържат елементи, които са отбелязани не-терминални символи, алгоритъмът е завършено, в противен случай - преминете към стъпка 2.

2). Изберете най-лявата възел на дървото, белязан символ не-терминал граматика и да го направи на ток. Преминете към стъпка 3.



3). Ако текущия възел има само един възел надолу, текущия възел трябва да бъдат отстранени от дървото, и свързания възел за свързване към възлова точка по-високо ниво (изключва дърво верига) и връщане към стъпка 1;

в противен случай - преминете към стъпка 4.

4). Ако текущия възел е с възел надолу по веригата (дърво листа), маркирано със символа на терминала, което не е обозначено на семантична натоварване, а след това този списък трябва да бъде отстранен от дървото и да се върнете към стъпка 3; в противен случай - преминете към стъпка 5.

5). Ако текущия възел има един възел надолу по веригата (дърво листа) етикетирани терминал символ показва знака на операцията, а останалите възли са отбелязани като операнди, възелът е белязана с работа в знак, че е необходимо да се отстрани от дървото, текущия възел е маркиран с тази операция символ, и преминете към стъпка 1 ; в противен случай - преминете към стъпка 6.

6). Ако сред долните възли на текущия възел има възли, които са отбелязани не-терминални символи на граматиката трябва да изберете най-лявата сред тези възли, за да го текущата възел преминете към стъпка 3; в противен случай - алгоритъм е завършена.

Този алгоритъм винаги работи с един възел на дървото, което се счита за ток и има за цел да изключи от дървото, всички възли, които са маркирани не-терминални символи. Така че кой от героите считат семантично незначителен, и които поемат героите операции решава компилатор разработчика. Ако семантиката на езика е зададен правилно, в резултат на алгоритъма всички nonterminals ще бъдат изключени от дървото.

Един пример на дървото синтаксис, която е построена за веригата (A +) * Б на езика определен от различни варианти на граматика на аритметични изрази е показано на фиг. 42.

В резултат на алгоритъм за преобразуване на разбор дървета, операции на дърветата, ние получаваме дървото операция е показано на фиг. 42. Освен това, въпреки факта, че първоначалните синтактични дървета имат различни структури в зависимост от използвания граматика, операции резултат дърво винаги имат една и съща структура, в зависимост само на семантиката на изходния език.

Фиг. 42. Пример за операции дърво за езика на аритметични изрази

операция Wood е форма на вътрешно представяне на програмата, който е удобен за използване на сцените на разбор, семантичен анализ и подготовка за генериране на код, когато не е необходимо да се работи директно с командата кодовете на получената програма.

Предимствата на вътрешния представителството като дърво на операциите:

1) ясно отразява отношението на всички сделки помежду си, така че е удобно да се използва за преобразуване, свързана с пермутация и пренареждане операции, без да променят крайния резултат;

2) синтактични дървета - това е машина независим формата на вътрешния представяне на програмата.

Синтаксис дървета недостатък е, че те са свързани сложни структури и следователно не може да бъде тривиално превръща в линейна последователност от команди, получени програма. Въпреки това, те са удобна работа с вътрешния представяне на програмата на сцената, когато не е необходимо да се обърне директно към командите на получената програма.

Синтаксис дървета могат да бъдат превърнати в други форми на вътрешно представяне на потребители на програмата са линейни, предвид семантиката на изходния език. Конвертирането се извършва на базата на Су-компилацията.

8.5 три-адрес код. Видове три-адрес инструкция

Три-адрес код е последователност от инструкции на формата

х: = у оп Z

където X, Y и Z - имена, константи, или временни променливи, генерирани от компилатора; оп е оператор, например аритметика оператор за работа с числа с фиксирана или плаваща запетая, или на оператора да работи с логическите стойности. Например, език израз на източник като х + у * Z може да се преведе в следната последователност.

т 1: = Y * Z

T 2 = х + т 1

Тук, т 1 и т 2 - съставител, генерирани временни имена. Използването на името на програмата за изчислената стойност осигурява три-адрес междинен код в постфиксната нотация контраст, дава възможност за лесно пренареждане.

Терминът "три-адрес код" The отразява факта, че всяка инструкция обикновено се състои от три адреси - за два операнда и един за резултата.

Списък на някои от основните три адресни инструкции се използват в повечето програмни езици:

1. Ръководство за възлагане на форма X: = у оп Z, където иликожи двоични аритметични или логически операции.

2. инструкциите възлагане на форма х на: = оп Y, където оп - едноместно операция. Основни операции включват едноместно минуса, логично отрицание, оператори на смени, и операторите на преобразуване, които, например, конвертиране на броя на фиксирана точка в плаваща точка номер.

3. Ръководство копие от формуляр х = Y, където Y се дава стойността на х.

4. Безусловната скок Гото L. три адреса на инструкцията с етикет L. ще бъде направен след това ръководство

5. Conditional скок като, ако х relop на Гото L. Тази инструкция се прилага релационна relop оператор (<,> =, и т.н.) на х и у, и следното твърдение е изпълнен с маркер на L, ако съотношението на х relop в дясно. В противен случай следното условно клон инструкция.

7. индексирани тип задача х: = ш [в] х [I]: = ш. Първото изявление възлага х стойност в I-ия памет клетката по отношение на у. Ръководство х [I]: = у,-Logs ия памет клетка по отношение на стойност у х на. И двете инструкции X, Y, и аз се отнасят за обектите на данни.

Първото сведение определя стойността на х е равно на позицията в паметта. Предполага се, че в името вероятно е временно, което показва израз с л-стойност от тип A [I, J], и х - индекс име или временно име. По този начин, R-стойност на х е стойността на даден обект. През второто изявление по смисъла на даден индекс или временна променлива, л-стойност, която представлява местонахождението на клетката памет. В резултат, L-стойност на X става равна на съдържанието на тази клетка. Накрая, инструкциите * X: = ил-определя стойността на обекта, посочен от X, L-стойност равна на у.

Избор на подходящи оператори е важен въпрос в създаването на междинна представителство. Очевидно е, че множеството на операторите трябва да бъде достатъчно богата, за да си позволи да се приложат всички операции на изходния език. Една малка група от оператори лесно изпълняват на нова целева машина, но ограничен набор от инструкции може да доведе до образуването на дълги поредици от инструкции за междинно представяне на някои структури на езика на източника и добавяне на целта от оптимизатор и код генератор.





; Дата: 12.27.2014; ; Прегледи: 212; Нарушаването на авторските права? ;


Ние ценим Вашето мнение! Беше ли полезна публикуван материал? Да | не



ТЪРСЕНЕ:


Вижте също:



zdes-stroika.ru - Studopediya (2013 - 2017) на година. Тя не е автор на материали, и дава на студентите с безплатно образование и използва! Най-новото допълнение , Al IP: 66.102.9.24
Page генерирана за: 0.049 сек.