Překladače 6. Sémantická analýza

Slides:



Advertisements
Podobné prezentace
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Advertisements

Překladače 2. Vnitřní struktura překladače © Milan Keršlágerhttp:// Obsah: ● činnost.
Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Programování v jazyce C++ Dědičnost a polymorfismus.
Zlepšení podmínek pro vzdělávání na středních školách Operačního programu Vzdělávání pro konkurenceschopnost Název a adresa školy: Integrovaná střední.
Překladače 6. Sémantická analýza
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
Postup modelování Kateřina Růžičková. Postup modelování Rozhodnutí modelovat Definice problému Existence modelu, pro daný problém Identifikace modelu.
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Věcné autority v roce 2016
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
Evaluace předmětů studenty (Anketky)
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Výukový materiál zpracován v rámci projektu
ELEKTRONICKÉ ZABEZPEČOVACÍ SYSTÉMY
Výukový materiál zpracován v rámci projektu
Obrázky Ram Rom Nástupci ROM Počítačová pamět Obrázky Paměti Ram rom
Přetěžování Datové typy.
Překladače Syntaktická analýza
AUTOR: Kateřina Křížová NÁZEV: VY_32_INOVACE_05_09 sociální role
Uživatelem definované datové typy
Výukový materiál zpracován v rámci projektu
Programování a simulace CNC strojů I.
Programování v jazyce C++
Abstraktní datové typy
Struktury.
Překladače Lexikální analýza
Financování přímých NIV
ADT zásobník - příklad Prakticky aplikovatelný příklad využití ADT zásobník je vyhodnocování aritmetických výrazů v Postfixové notaci: Pro zápis aritmetických.
Databáze MS ACCESS 2010.
Řadič Orbis pictus 21. století
Programovací jazyky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Překladače 4. Lexikální analýza
Datové typy v jazyce C Datové typy void skalární aritmetické
Výukový materiál zpracován v rámci projektu
Lexikální atomy jazyka C
Výukový materiál zpracován v rámci projektu
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Vzdělávání pro konkurenceschopnost
Výukový materiál zpracován v rámci projektu
Databázové systémy, datové modelování
Stavební fakulta ČVUT, B407
BIBS Informatika pro ekonomy přednáška 2
Informatika pro ekonomy přednáška 8
Překladače Syntaktická analýza
Číslicové měřící přístroje
Překladače 6. Sémantická analýza
Jak postupovat při měření?
Programovatelné automaty (Programmable logic controllers – PLC)
Základy algoritmizace 3/13 příkaz cyklus, proměnná typu pole
MU002 Informatika II Základy algoritmizace 1/13
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Materiál byl vytvořen v rámci projektu
Remote login.
3. přednáška Laplaceova transformace
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Projektové řízení výstavby podle PMBOK 2. Řízení rozsahu
Datové typy v jazyce C Datové typy void skalární aritmetické
Název operačního programu: OP Vzdělávání pro konkurenceschopnost
Dynamické programování Úloha batohu neomezená
Lineární funkce a její vlastnosti
Informatika – Základní operace s buňkami
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Union neboli sjednocení Bitová pole
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Překladače 6. Sémantická analýza Obsah: tabulka symbolů bloková struktura programu intermediální kód typová kontrola © Milan Keršláger http://www.pslib.cz/ke/slajdy 31.3.2011 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?

Tabulka symbolů (jen proměnné) 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 pro proměnnou – datový typ pro funkci – 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 → řádek je závislý na předchozím 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, velikost nutného prostoru při interpretování kódu obsahuje hodnoty proměnných

Realizace tabulky symbolů požadavek na 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 zatím není výhodné generovat cílový kód i. k. se lépe optimalizuje (další fáze překladu) v i. k. chybí 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 též ohodnocený syntaktický strom získán úpravou derivačního stromu zůstanou jen uzly s terminály vnitřní uzly obsahují operátory listy obsahují operandy např. proměnné, čísla

X:=A+2*B := X + A * 2 B

X:=A*2+B := X + * B A 2

for i:=1 to 3 do x:=x*i for-to-do 7 := := x i 2 * x i

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 (více vlevo) 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ů

Rozdělení jazyků podle toho, jak zachází s datovými typy silně typované slabě typované netypové jazyky

Silně typované jazyky tzv. typově bezpečné jazyky ADA, Java, C#, Python, též spíše C++ 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 není však podmínkou pro každou operaci operandy konkrétního typu

Slabě typované jazyky 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“)); možnost změny chování jazyka VisualBasic.NET nejprve slabě, pak silně typový nastavuje se direktivou kompilátoru (Option Explicit On/Off)

Netypové jazyky netypové jazyky téměř neexistují např. shell datové typy nemá programátor se s nimi vůbec nesetká interně se však datové typy používají zástupci: běžné unixové shelly dávkové soubory .BAT původně DOS dnes je ve Windows NT interpretuje cmd.exe

Sémantika jazyka dle toho, kdy prováděna sémantická kontrola statická sémantika dynamická sémantika není vztah se slabě/silně typovanými jazyky většina dynamicky typovaných má silné kontroly (za běhu programu)

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