Překladače Syntaktická analýza

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Pro začátek něco lehčího
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Programovací jazyk C++
Programování funkcí v Excelu
Algoritmizace a programování Datové typy v Delphi - 05
Programování v C++ Cvičení.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Principy překladačů Mezikód Jakub Yaghob.
Materiály k přednášce Úvod do programování Ondřej Čepek.
Generování mezikódu Jakub Yaghob
Lexikální a syntaktická analýza Jakub Yaghob
Databáze Jiří Kalousek.
Informatika I 3. přednáška
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Jednoduché datové typy
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Sémantická analýza Jakub Yaghob
Syntaxí řízený překlad
Relační databáze.
Informatika pro ekonomy II přednáška 10
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Počítače a programování 1
Cvičení.
Datové typy a struktury
IB111 Programování a algoritmizace
STROMY Datová struktura sestávající z uzlů
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Databázové modelování
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Gymnázium, Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Hodonín Úvod do programování.
Databázové systémy Informatika pro ekonomy, př. 18.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Úvod do programování2 Vyučující: Mgr. Vítězslav Jersák Web: xjv.webnode.cz.
Překladače Vnitřní struktura překladače © Milan Keršláger
Překladače 1. Překladače a programovací jazyky © Milan Keršlágerhttp:// Obsah:
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Překladače Operační paměť © Milan Keršláger
Překladače 6. Sémantická analýza
Databáze ● úložiště dat s definovaným přístupem ● typy struktury – strom, sekvence, tabulka ● sestává z uspořádaných záznamů ● databáze – struktura – záznam.
Překladače 4. Lexikální analýza © Milan Keršlágerhttp:// Obsah: ● vstupní formáty,symboly.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Programovací jazyk C# 4. část - cykly.
Výukový materiál zpracován v rámci projektu
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Překladače 5. Syntaktická analýza
Výukový materiál zpracován v rámci projektu
Vzorové řešení zápočtového testu
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Překladače 2. Vnitřní struktura překladače
Programování v jazyce C++
Operační systémy Vnitřní struktura překladače
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Informatika pro ekonomy přednáška 8
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Překladače 6. Sémantická analýza
Oblast platnosti identifikátoru (1)
Překladače 6. Sémantická analýza
Vyhodnocování aritmetického výrazu (1)
Transkript prezentace:

Překladače Syntaktická analýza © Milan Keršláger 11.05.2018 http://www.pslib.cz/ke/slajdy http://creativecommons.org/licenses/by-nc-nd/3.0/

Sémantická analýza třetí fáze zpracování zdrojového kódu zabývá se významem symbolů a skupin symbolů vzniká tabulka symbolů vstup: derivační strom dodává syntaktický analyzátor výstup: intermediální kód postihuje strukturu a částečně i kód programu sémantické chyby použití nedeklarované proměnné, nekompatibilní datový typ proměnné ve výrazu či argumentu funkce

Tabulka symbolů obsahuje pojmenované identifikátory nevztahuje se na klíčová slova jazyka proměnné, konstanty, názvy funkcí, návěští, ... lexikální (ani syntaktická) analýza je neumí odlišit využívá se: při překladu – překladač při provádění – interpret položky tabulky (sloupce): název, typ, délka, deklarováno?, adresa, použito?

Ukázka tabulky symbolů Název Typ Délka Deklaro-váno Adresa Použito delky integer array 10 40B A ? N i integer 4B pocet double 8B x real y

Význam položek – 1 typ proměnná – datový typ funkce – ukládáme více údajů: počet a typ jednotlivých parametrů volání odkazem, hodnotou datový typ návratové hodnoty třída v OOP – navíc předek, vlastnosti, ... délka závislá na definici typu v konkrétním jazyce může být závislá na použité platformě

Význam položek – 2 deklarováno slouží k odhalení sémantické chyby v některých jazycích není deklarace nutná adresa absolutní adresa, relativní adresa, index interpret ukládá hodnoty přímo do tabulky použito

Využití tabulky symbolů zjišťování sémantických chyb byl již symbol použit?, jakého je typu? absence deklarace nelze kruhové deklarace lze dopřednou definici způsobuje potíže (závislosti → víceprůchodová analýza) při generování cílového kódu (další fáze) tabulka zůstává uložena při interpretování kódu obsahuje hodnoty proměnných

Realizace tabulky symbolů snadné prohledávání po načtení symbolu je nutné zjistit, není-li v tabulce důležité u překladače i interpretu volba vhodné datové struktury statický seznam, dynamický seznam binární strom, dynamické pole záznamů řídká tabulka, hashovaná tabulka řazení záznamů podle abecedy index podle abecedy – data uspořádána jinak

Vznik tabulky symbolů při sémantické analýze klasický přístup máme k dispozici veškeré potřebné údaje v dřívějších fázích překladu vlastnosti doplňujeme později při lexikální analýze neznámé identifikátory vloží do tabulky atribut symbolu pak odkazuje do tabulky při syntaktické analýze

Bloková struktura programu strukturované jazyky moderní technika programování umožňují efektivní kontrolu použití objektů rozlišuje globální a lokální objekty přístupnost lokálních objektů je omezená stejné jméno lokálního objektu neovlivní globální bloky vytvářejí stromovou strukturu vnořený blok je ve stromě podřízený objekt je dosažitelný jen z podřízených bloků každý blok svoji tabulku

Bloková struktura 1: tab1 A1, B1 2: tab2 → tab1 C2, D2, A1, B1 3 E3, F3 4 G4, H4 1: tab1 A1, B1 2: tab2 → tab1 C2, D2, A1, B1 3: tab3 → tab1 E3, F3, A1, B1 4: tab4 → tab3 → tab1 G4, H4, E3, F3, A1, B1

Organizace do stromu 1: tab1 A1, B1 2: tab2 → tab1 C2, D2, A1, B1 3: tab3 → tab1 E3, F3, A1, B1 4: tab4 → tab3 → tab1 G4, H4, E3, F3, A1, B1

Zpracování organizace tabulek každý blok svoji tabulku podřízený blok níže ve stromové struktuře zaznamenáme odkazy na nadřízené bloky umožňuje procházení nadřízené tabulky překrývání proměnných vnořená překrývá stejnou z nadřízeného bloku využití zásobníku vstup do bloku = volání procedury na zásobník kopii tabulky symbolů

Intermediální kód intermediální kód se lépe optimalizuje optimalizace je další fáze překladu programu chybí v něm adresy operandů není ještě rozhodnuto o využití registrů CPU různé varianty i. k. s ohledem na další využití varianty pro kompilaci musí být snadno optimalizovatelné snadná transformace do cílového strojového kódu varianty pro interpretaci bez dalších úprav snadno intepretovatelný

Varianty intermediálního kódu tří-adresový kód základní: operátor, argument1, argument2, výsledek zhuštěný: operátor, argument1, argument2 sémantický strom je to ohodnocený syntaktický strom postfixový tvar tzv. polská notace

Tří-adresový kód jistá podobnost s assemblerem jeden řádek → několik strojových instrukcí příklad: A := (-B) * (C + D) Upravíme Op. Arg1 Arg2 T1:= -B T2:= C + D T3:= T1 * T2 A := T3 1 2 3 4 uminus + * := B C A D

Sémantický strom

Postfixová notace operátor umístěn za operandy tzv. reverzní polská notace jednoduché kalkulátory nevyžadující závorky infixový zápis: (1 + 2) * (3 + 4) postfixový tvar:  1 2 + 3 4 + * převod pomocí překladové gramatiky při výpočtu se používá zásobníkový automat snadný převod do strojového kódu optimalizace není příliš snadná vhodný pro interpretaci i kompilaci

Typová kontrola vztahuje se na: datové typy operandů aritmetických a relačních operátorů kontroly parametrů funkcí další příkazy obsahující proměnné prvky operátor vyžaduje operandy určitého typu celé + celé = celé reálné + reálné = reálné znak + znak = řetězec řetězec + řetězec = řetězec jinak buď přetypování nebo hlášení chyby

Přetypování nejsou-li datové typy kompatibilní, přetypujeme stanovení priority datových typů operand s nižší prioritou přetypujeme priorita v jazyce C pro implicitní přetypování: int → unsigned int → long → unsigned long → float → double → long double přetěžování operátorů dynamická posloupnost datových typů a předpisů polymorfismus volání funkce pro různé typy (i počet) parametrů funkce vrací hodnotu různých datových typů

Silně typované jazyky tzv. typově bezpečné jazyky ADA, Java, C#, Python nevylučuje to možnost chyby usnadňuje kontrolu programátora při každé operaci provedena kontrola dat. typů → chybové hlášení nebo dynamické přetypování některé jazyky vyžadují při deklaraci nutně typ pro každou operaci operandy konkrétního typu

Slabě typované jazyky, netypové méně kontrol datových typů příčina běhových chyb jazyk C, Perl operaci je možné provést s různými typy někdy jen do určité míry např.: printf(“%d“, (1+“1“)); netypové jazyky téměř neexistují shell datové typy nemá (interně je však používá) možnost změny chování jazyka VisualBasic.NET nejprve slabě, pak silně typový

Statická sémantika statická typová kontrola Java, Ada, jazyk C základní práce s tabulkou symbolů řeší se při překladu programu forma a nutnost deklarací, typy parametrů význam příkazů a jazykových konstrukcí staticky typované jazyky deklarace vždy s datovým typem možnost větší typové kontroly za běhu typicky jen chyba přetečení

Dynamická sémantika dynamická typová kontrola řeší se za běhu programu vede k více běhovým chybám dynamicky typované jazyky Python, Smalltalk, Prolog, ... nevyžadují uvádění datového typu ani deklarace nová proměnná dle výsledku vyhodnocení výrazu možnost změny typu proměnné za běhu programu zkracuje se zápis kódu