Překladače Lexikální analýza

Slides:



Advertisements
Podobné prezentace
Školení MS Word 2007 pro začátečníky RNDr. Milan Zmátlo MěÚ Třebíč, říjen 2011 Vzdělávání v eGON centru Třebíč Tento.
Advertisements

Úhel Převody jednotek velikosti úhlů Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Radomír Macháň. Dostupné z Metodického portálu.
Výukový materiál zpracovaný v rámci projektu EU peníze školám Registrační číslo projektu:CZ.1.07/1.4.00/ Šablona:III/2 Inovace a zkvalitnění výuky.
Excel – funkce Gymnázium a Jazyková škola s právem státní jazykové zkoušky Svitavy Ditta Kukaňová.
Odborný výcvik ve 3. tisíciletí Tato prezentace byla vytvořena v rámci projektu.
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.
Maticové počítače. Při operacích s maticí se větší počet prvků matice zpracovává současně a to při stejné operaci. Proto se pro tyto operace hodí nejlépe.
Formáty souborů (neboli typ souboru) obvykle určuje význam dat v elektronickém souboru. Existuje množství různých formátů, přizpůsobených pro ukládání.
IP adresace (IPv4) Velikost a určení IP adresy I. Epocha (dělení na třídy) II. Epocha (zavedení masky) Speciální adresy Příklady a řešení IP adres Souhrn.
ZAL – 5. cvičení Martin Tomášek Pole - opakování Základní datový typ. V poli držíme více elementů (jednoho typu) S elementy v poli můžeme manipulovat.
Čí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.
Překladače 4. Lexikální analýza © Milan Keršlágerhttp:// Obsah: ● vstupní formáty,symboly.
Výukový materiál zpracovaný v rámci projektu EU peníze školám Registrační číslo projektu:CZ.1.07/1.4.00/ Šablona:III/2 Inovace a zkvalitnění výuky.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Inf Vizualizace dat a tvorba grafů. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím.
Úvod do databází MS Access (1).
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Věcné autority v roce 2016
Senzory pro EZS.
Výukový materiál zpracován v rámci projektu
ZÁKLADY ÚČETNICTVÍ A PODVOJNÝ ZÁPIS
Počet čísel Počet hodnot
Poměr.
Překladače 5. Syntaktická analýza
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: ,
Způsoby zápisu algoritmů
Výukový materiál zpracován v rámci projektu
Přetěžování Datové typy.
Název projektu: Moderní výuka s využitím ICT
Výukový materiál zpracován v rámci projektu
Číslo projektu CZ.1.07/1.4.00/ Název sady materiálů
Programování v jazyce C++
Autor: Předmět: Ročník: Název: Označení: DUM vytvořen:
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.
Uložení dat v PC -Binární (dvojkový) systém-
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.
Překladače 4. Lexikální analýza
Název školy Základní škola Jičín, Husova 170 Číslo projektu
Číslicová technika.
Souběh Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Lexikální atomy jazyka C
Běžné reprezentace grafu
Poměr v základním tvaru.
DIGITÁLNÍ UČEBNÍ MATERIÁL
Inf Vývojový diagram.
4.1 – 4.3 Lineární nerovnice i jednoduchý podílový tvar
Výukový materiál zpracován v rámci projektu
Překladače 6. Sémantická analýza
MATEMATIKA Poměr, úměra.
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Stavební fakulta ČVUT, B407
Výukový materiál zpracován v rámci projektu
Překladače Syntaktická analýza
Číslicové měřící přístroje
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Programovatelné automaty (Programmable logic controllers – PLC)
Zlomky Sčítání zlomků..
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Teorie chyb a vyrovnávací počet 1
Poměr v základním tvaru.
MATEMATIKA – ARITMETIKA 6
Dynamické programování Úloha batohu neomezená
Lineární funkce a její vlastnosti
Informatika – Základní operace s buňkami
Grafy kvadratických funkcí
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

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

Lexikální analýza první fáze zpracování zdrojového programu vstup: zdrojový kód programu zápis v nějakém programovacím jazyce různé vstupní formáty řeší se raději konverzními programy výstup: posloupnost symbolů atom, lexém, lexikální jednotka lexikální chyby neplatný znak, neplatný identifikátor (4SUM)... pouze v rámci jednoho symbolu

Vstupní formáty text holý text (plain text), jeden či více souborů snadno čitelný, bez skrytých významů, case sensitive? vázaný text struktura používána k vytváření konstrukcí jazyka odsazování v Pythonu, jeden příkaz = jeden řádek atp. binární formát typicky generovaný kód (návrhář formulářů) dynamická struktura v paměti produkt jiného programu

Symboly též atom, lexém, lexikální jednotka, ... jsou to nejmenší části s vlastním významem klíčové slovo, číslo, operátor, název proměnné, ... skládá se ze dvou částí název (identifikace symbolu) S_BEGIN, S_NUM, S_PLUS, S_ID, ... atribut (skutečná hodnota) číslo, název proměnné, ... pozor na nevhodné atributy (typ operátoru) → obtížnější určování priority operátorů

Příklad zpracování CONST pi=3.14; VAR obvod; BEGIN obvod:=2*pi*polomer; ... END S_CONST S_ID pi S_EQ S_NUM 3.14 S_SEM S_VAR S_ID obvod S_BEGIN S_IS S_NUM 2 S_MUL S_ID polomer ... S_END // pro výstup záznamů // použit výčtový typ Tsymbol = record typ: TtypSymbolu; attr: string; end;

Skladba vstupu abeceda A..Z, a..z, 0..9, +, -, ×, /, >, <, =, (, ), ;, : rezervované identifikátory (klíčová slova) BEGIN, END, VAR, CONST, IF, THEN, ELSE, ... ostatní identifikátory (názvy proměnných) operátory aritmetické, relační, přiřazení pomocné symboly závorky, středník, ...

Syntaktické grafy slouží pro definici jazyka (v učebnicích) definuje jednotlivé lexikální symboly písmeno písmeno číslo písmeno Symbol S_NUM Symbol S_ID < = + Symbol S_LE Symbol S_PLUS

Rozpoznávání symbolů potřebujeme konečný deterministický automat na vstupu je řetězec znaků k analýze čtení znaků + změna vnitřního stavu automatu lze využít výstupní pásku pro každý symbol má automat jiný koncový stav po načtení celého vstupu zjistíme, jaký je to symbol nejprve zákres automatu kolečka značí stavy automatu šipky nesou symbol, který způsobí změnu stavu

Konečné automaty S S_ID S : A < S S S_LT > = = S_IS S_NE S_LE písmeno číslo číslo písmeno číslo S S_ID S S_NUM Konečný automat pro S_ID Konečný automat pro S_NUM : A < S S S_LT > = = S_IS S_NE S_LE Konečný automat pro S_IS Konečný automat pro relační operace

Rozpoznání jazyka automatem stavové diagramy pro všechny symboly využijeme syntaktické grafy vzniknou konečné deterministické automaty koncové stavy představují symboly shrneme všechny diagramy do jednoho sloučíme počáteční stavy pro všechna slova jazyka může vzniknout problém determinističnosti jeden znak vede do dvou různých stavů nejlépe jazyk, který toto nemá; nicméně lze vyřešit i jinak vzniká automat rozpoznávající jazyk

Činnost konečného automatu v každém stavu se načte jeden další znak podle něho se rozhodne, kterou větví dále v koncovém stavu ještě následující znak pro kontrolu správného ukončení symbolu nenalezne-li se další větev → symbol? není větev, po které by se pokračovalo je v koncovém stavu → je to symbol (zapíšeme) hlášení chyby není-li v koncovém stavu a není kam pokračovat

Zápis vystupujících symbolů holý text snadné hledání chyb lexikálního analyzátoru např. vázaný text pomalejší na zpracování binární soubor jednodušší načítání (např. pole nebo typ záznam) dynamická struktura v paměti vhodné pro přímé předání další fázi překladu dynamický seznam

Implementace automatu nekonečné jazyky obsahují identifikátory proměnných, čísla, řetězce... těmi běžně programujeme konečné jazyky používá se na rozlišení klíčových slov kombinujeme oba přístupy jako nekonečné jazyky → vše je identifikátor konečné jazyky → není identifikátor klíčové slovo?

Metody programování přímé stavové programování (nekonečné jazyky) změna stavu vyjádřena místem v programu tj. algoritmus sleduje strukturu jazyka tabulka přechodů (konečné jazyky) změna stavu je změnou pozice v tabulce obecně naprogramovaný automat stav reprezentován proměnnou (konečné jazyky) variace na tabulku

Stavové programování po načtení znaku změna stavu → příkaz switch (case) načtení nemění stav (smyčka) → while při změně struktury jazyka: → nutné měnit kód programu smyčka nesmí být přes více, než 1 stav v kódu programu nelze couvat (tj. vrátit se do výše položeného místa) → GOTO?

Příklad: stavové programování

Tabulka přechodů pro regulární gramatiku pravidla ve tvaru: A → aB nebo A → a velká písmena: neterminály, malá: terminální symboly různé neterminály označují různé stavy použijeme-li indexy → řádky tabulky terminální symboly → sloupce při výpočtu se mění pozice v matici čísla uvnitř matice → číslo nového stavu je to nejobecněji naprogramovaný automat změna v jazyce mění pouze tabulku, ne však kód

Příklad: tabulka přechodů

Příklad: tabulka přechodů (kód)

Stav reprezentován proměnnou pro konečné, ale i nekonečné jazyky přechod do jiného stavu je přímo v kódu změna jazyka mění kód automatu odpadají velké tabulky v paměti → dají se však realizovat řídkými maticemi to však dále komplikuje kód lexikálního analyzátoru čtení vstupu pomocí smyčky while příkaz switch zajistí různé stavy jednotlivé case řeší přechody do jiného stavu

Příklad: stav pomocí proměnné

Datové typy dosud uvažována jen celá kladná čísla reálná čísla, řetězce, výčtové typy, pole, pointery... lexikální analýza to nemusí řešit, ale: konstanty se řeší již v lexikální analýze jako by přibylo další klíčové slovo ovlivňují analýzu dynamicky (za běhu) reprezentace v atributu symbolu číslo jako řetězec převod na vhodnou binární reprezentaci

Převod čísla na binární tvar buď v lexikální nebo sémantické analýze číslo načteme jako řetězec volíme cílový datový typu prostorově nejnáročnější (reálné, komplexní) prostorově nejúspornější nutná bližší analýza (znaménko?, mezní hranice?, E?) problém reprezentace na dané architektuře integer 4 bajty na 32bitovém CPU, ale 8 bajtů na 64bit. může způsobit nepřenositelnost programu

Řetězce důležitá je jen délka řetězce optimalizace prostorové náročnosti někdy (jazyk C) lze řetězec na více řádků můžeme složit dohromady nezabýváme se však spojováním řetězců tzv. zřetězení → syntaktická analýza nicméně lze v primitivních případech

Pole, záznamy jde jen o zadávání polí a záznamů každý jazyk definuje jinak příliš komplikované a sofistikované není to úloha pro lexikální analýzu předáváme dál v rozloženém tvaru jako jednotlivé symboly