Generacja kodu docelowego

Podobne dokumenty
Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Przyczyny dwustopniowego tłumaczenia

Wyrażenia regularne.

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Pole wielokąta. Wejście. Wyjście. Przykład

Algorytmy i Struktury Danych

Instrukcje sterujące. Programowanie Proceduralne 1

Teoretyczne podstawy informatyki

Analiza semantyczna. Gramatyka atrybutywna

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT

KONSTRUKCJA KOMPILATORÓW

Drzewa podstawowe poj

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Sortowanie topologiczne skierowanych grafów acyklicznych

Zestaw 1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Zad. 2: 2,2,2 5,5,5,5,5,5 Zad.

Matematyczne Podstawy Informatyki

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Zestaw C-11: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp i.h)!!! Zad. 1: Zad. 2:

Wskaźniki. Programowanie Proceduralne 1

Wykład 11. Konstrukcja drzew składniowych

Lista Rozkazów: Język komputera

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Zapis algorytmów: schematy blokowe i pseudokod 1

Wykład z Technologii Informacyjnych. Piotr Mika

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

a) 7 b) 19 c) 21 d) 34

Język programowania PASCAL

Architektura komputerów

Język ludzki kod maszynowy

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Definicje. Algorytm to:

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Metody Kompilacji Wykład 1 Wstęp

Operatory logiczne. Podstawowe operatory logiczne, składanie wyrażeń z użyciem operatorów logicznych

7. Teoria drzew - spinanie i przeszukiwanie

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

SYSTEMY UCZĄCE SIĘ WYKŁAD 3. DRZEWA DECYZYJNE. Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska.

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Podstawy Informatyki. Wykład 6. Struktury danych

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

Analizator syntaktyczny

Architektura komputerów

PHP w-3. Sterowanie w PHP

Energooszczędne programowanie

if (wyrażenie ) instrukcja

Odwrotna Notacja Polska

UKŁADY MIKROPROGRAMOWALNE

Teoria układów logicznych

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Robert Barański, AGH, KMIW MathScript and Formula Nodes v1.0

Ogólne wiadomości o grafach

Odczyt danych z klawiatury Operatory w Javie

Zestaw A-1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: 4,3,3 2,2,1 Zad. 2: 3,3,3 Zad.

Języki i paradygmaty programowania

Przykładowe B+ drzewo

Podstawy programowania w języku C

3.4. Opis konfiguracji layoutów.

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

Wysokość drzewa Głębokość węzła

Rozwiązywanie problemów metodą przeszukiwania

Algorytmika i Programowanie VBA 1 - podstawy

Rozdział 1 PROGRAMOWANIE LINIOWE

ALGORYTMY I STRUKTURY DANYCH

W 5_2 Typy języków programowania sterowników PLC (zdefiniowane w IEC-61131) - języki graficzne (LD, FBD); języki tekstowe (ST, IL).

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

INFORMATYKA DANE.

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytm. a programowanie -

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

1 Wprowadzenie do algorytmiki

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Język C, tablice i funkcje (laboratorium, EE1-DI)

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Automat Moore a. Teoria układów logicznych

Definicje wyższego poziomu

Gramatyki atrybutywne

Podstawowe struktury danych

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Wykład 14. Środowisko przetwarzania

ZASADY PROGRAMOWANIA KOMPUTERÓW

TRANSLACJA I TRANSLATORY

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński

Matematyka dyskretna - 7.Drzewa

Monika Wrzosek (IM UG) Programowanie obiektowe 21 / 25

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

Techniki optymalizacyjne w kompilatorach. Piotr Błaszyński

Metody Kompilacji Wykład 3

dr inż. Paweł Myszkowski Wykład nr 11 ( )

Transkrypt:

Generacja kodu docelowego Zagadnienia związane z generacją kodu Język wejściowy i wynikowy Zarządzanie pamięcią (adresacja) Wybór rozkazów maszynowych (koszty rozkazów) Przydział i wyznaczanie rejestrów Kolejność obliczeń Bloki bazowe lider pierwsza instrukcja, instrukcja bezpośrednio po skoku, cel skoku przekształcenia bloków bazowych zachowujące strukturę: usuwanie wspólnych podwyrażeń (common subexpression), usuwanie martwego kodu, zamiana nazw zmiennych tymczasowych, wymiana dwu niezależnych instrukcji sąsiednich algebraiczne O.Świda wg A.Aho,R.Sethi,J.Ullman 1

(1) r := 0 (2) i := 1 (3) t 1 := 4 * i (4) t 2 := a [ t 1 ] (5) t 3 := 4 * i (6) t 4 := b [ t 3 ] (7) t 5 := t 2 * t 4 (8) t 6 := r + t 5 (9) r := t 6 (10) t 7 := i + 1 (11) i := t 7 (12) if i <= 5 goto (3) (1) i := 0 (2) j := 0 Bloki bazowe i grafy przepływu (3) t1 := i * j (4) t2 := t1 * j (5) t3 := a [ t2 ] (6) t4 := j * j (7) t5 := t4 + i (8) t6 := b [ t5 ] (9) t7 := i * j (10) t8 := t7 + j (11) t9 := t3 * t6 (12) t10 := c [ t8 ] (13) t11 := t10 + t9 (14) c[t8] := t11 (15) t12 := j + 1 (16) j := t12 (17) if j < 5 goto (3) (18) t13 := i + 1 (19) i := t13 (20) if i < 5 goto (2) O.Świda wg A.Aho,R.Sethi,J.Ullman 2

Określanie ostatniego użycia zmiennej Bloki bazowe c.d każda zmienna opisywana jest przez parę [ status(żywa/martwa), linia ] przeglądamy instrukcje od końca (zmienne nietymczasowe są żywe przy wyjściu z bloku) w każdej linii i postaci x := y op z zapisujemy aktualny status oraz zapisujemy: x[martwa, ], y[żywa,i], z[żywa,i] w tablicy symboli Zmienne tymczasowe a informacja o używaniu zmiennych Directed Acyclic Graph reprezentacja bloku Liście etykietowane nazwami zmiennych lub stałych (z indeksem 0) Wierzchołki wewnętrzne posiadają: etykietę operatora, sekwencję identyfikatorów (aktualne wartości nazw) Przydatne do usuwania wspólnych podwyrażeń O.Świda wg A.Aho,R.Sethi,J.Ullman 3

Przykładowy kod Rejestry (R0,R1), pamięć dla zmiennych, Instrukcje: MOV, ADD,SUB,MULT (źródło, cel) t 1 := a + b t 2 := c + d t 3 := e t 2 t 4 := t 1 t 3 Zmiana kolejności instrukcji może polepszyć kod wynikowy MOV a, R0 ADD b, R0 MOV c, R1 ADD d, R1 MOV R0, t1 MOV e, R0 SUB R1,R0 MOV t1,r1 SUB R0,R1 MOV R1,t4 O.Świda wg A.Aho,R.Sethi,J.Ullman 4

Directed Acyclic Graph W(x) wskaźnik na ostatnio utworzony wierzchołek związany z x Dla każdej instrukcji postaci: (1) x := y op z lub (2) x := op y lub (3) x:=y jeżeli W(y)== undef (podobnie dla z w przypadku (1) ) W(y) = nowy wierzchołek o etykiecie y w sytuacji: (1) sprawdź, czy istnieje wierzchołek o etykiecie op,którego lewym dzieckiem jest W(y), a prawym W(z). W (2) podobnie. Jeżeli istnieje taki wierzchołek to oznacz go n, jeśli nie utwórz nowy. W przypadku (3) n=w(y) Usuń x z listy identyfikatorów wierzchołka W(x) i dodaj x do listy n. W(x) = n O.Świda wg A.Aho,R.Sethi,J.Ullman 5

Heurystyczne porządkowanie DAG oraz etykietowanie WW - zbiór niewypisanych wierzchołków wewnętrznych dopóki WW nie jest pusty: { n - niewypisany wierzchołek z wypisanymi rodzicami wypisz n dopóki skrajne lewe dziecko (m) dla n nie ma niewypisanych rodziców i nie jest liściem: { wypisz m n := m } } Jeżeli n jest liściem: lewostronnym - etykieta = 1 innym - etykieta = 0 w przeciwnym wypadku: n 1,n 2,n 3...n i dzieci uporządkowane wg etykiet etykieta = max i (etykieta(n i )+i-1) O.Świda wg A.Aho,R.Sethi,J.Ullman 6

Przykład generacji kodu gen(n): (0) if: n liść reprezentujący zmienną i lewostronne dziecko "MOV n, top(rejestry)" elseif: n wierzchołek wewnętrzny operatora OP (n 1,n 2 - dzieci) (1) if: et(n 2 ) == 0 ) "OP n 2, top(rejestry)" (2) elseif: 1 <= et(n 1 ) < et(n 2 ) oraz et(n 1 ) < rozmiar(rejestry) swap(rejestry); gen(n 2 ); R = pop(rejestry); ); "OP R,top(rejestry)" ; push(rejestry,r) swap(rejestry) (3) elseif: 1 <= et(n 2 ) <= et(n 1 ) oraz et(n 2 ) < rozmiar(rejestry) ); R = pop(rejestry); gen(n 2 ); "OP top(rejestry), R" push(rejestry,r) (4) else: gen(n 2 ); T = pop(temp); "MOV top(rejestry), T"; ); push(temp,t); "OP T, top(rejestry)" O.Świda wg A.Aho,R.Sethi,J.Ullman 7