Syntaxí řízený překlad

Slides:



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

Programování v C jazyku - SEMINÁŘ
Vstup a výstup doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
A4B33OSS (J. Lažanský) verze: Podzim 2013 Od programu k procesu 1 Obsah Téma 8 – Od programu k procesu 1.Interpretace a kompilace 2.Od zdrojového textu.
Programování v Pascalu Přednáška 3
Algoritmizace a programování Podprogramy v Delphi - 10
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
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.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Principy překladačů Překladač Jakub Yaghob. Literatura a slajdy Aho, Sethi, Ullman: Compilers - Principles, Techniques and Tools, Addison-Wesley 1986.
Generování mezikódu Jakub Yaghob
Principy překladačů Vysokoúrovňové optimalizace Jakub Yaghob.
Lexikální a syntaktická analýza Jakub Yaghob
MATLAB® ( Funkce v Matlabu ).
Algoritmizace a programování
Informatika I 3. přednáška
Lestes C++ compiler. Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr.
Procedury a funkce Základní charakteristika a použití v programu.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
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í.
Příklady použití zásobníkového automatu
Formální jazyky a gramatiky
Sémantická analýza Jakub Yaghob
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
DEKLARACE PROMĚNNÝCH A KONSTANT
Jazyk vývojových diagramů
Počítače a programování 1
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
XML Schema Irena Mlýnková. Obsah XML – úvod, příklad, základní pojmy DTD – přehled XML Schema – podrobně.
Programovací jazyk PASCAL
Výroková logika.
Úvod do předmětu Opakování
Vztah bezkontextových jazyků a ZA
STROMY Datová struktura sestávající z uzlů
Regulární výrazy Regulární výrazy představují další možnost popisu regulárních jazyků (právě od nich dostaly své jméno). Definice: Množina všech regulárních.
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
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.
Konečné automaty Vít Fábera.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
4IZ 229 – Cvičení 2 Tvorba báze znalostí Vladimír Laš.
Pokročilé programování v C++ (část B)
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
String-distributing systems Top-Down / Bottom-Up Ing. Zbyněk Křivka Školitel: Doc. Alexander Meduna.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
POSLOUPNOST test. ZKUSTE ODPOVĚDĚT Co je to komentář? Poznámky, které nám pomohou pochopit, když se k programu vrátíme po delší době, co jsme chtěli tou,
Miroslav Beneš Dušan Kolář
Překladače Vnitřní struktura překladače © Milan Keršláger
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Funkce. Funkce - definice Funkce je zobrazení, které každému číslu z podmnožiny množiny reálných čísel R přiřazuje právě jedno reálné číslo. Funkci značíme.
Překladače 6. Sémantická analýza
Překladače 4. Lexikální analýza © Milan Keršlágerhttp:// Obsah: ● vstupní formáty,symboly.
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é.
Překladače 5. Syntaktická analýza
ZAL – 3. cvičení 2016.
Překladače Syntaktická analýza
Operační systémy Vnitřní struktura překladače
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
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.
Oblast platnosti identifikátoru (1)
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Podprogramy.
Překladače 6. Sémantická analýza
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Predikátová logika.
Transkript prezentace:

Syntaxí řízený překlad Miroslav Beneš Dušan Kolář

Syntaxí řízený překlad Definice: Překlad je relace TRAN: L1 -> L2 L1*  - vstupní abeceda L2 *  - výstupní abeceda Příklad L1 – jazyk infixových výrazů L2 – jazyk postfixových výrazů Syntaxí řízený překlad

Syntaxí řízený překlad Překladová gramatika Definice: Překladová párová gramatika V = (N, , , P, S) N - neterminály  - vstupní abeceda  - výstupní abeceda P – přepisovací pravidla S – startovací neterminál P: A -> , (N)*, (N)* Neterminály z  jsou permutacemi neterminálů z  Syntaxí řízený překlad

Syntaxí řízený překlad Příklad E -> E+T, ET+ E -> T, T T -> T*F, TF* T -> F, F F -> (E), E F -> i, i Syntaxí řízený překlad

Syntaxí řízený překlad Příklad - derivace [E,E] => [E+T, ET+] => [T+T, TT+] => [F+T, FT+] => [i+T, iT+] => [i+T*F, iTF*+] => [i+F*F, iFF*+] => [i+i*F, iiF*+] => [i+i*i, iii*+] Syntaxí řízený překlad

Syntaxí řízený překlad Překladová gramatika Jsou-li neterminály ve vstupní i výstupní části pravé strany ve stejném pořadí, můžeme obě části spojit => překladová gramatika Musíme ale odlišit vstupní a výstupní symboly Syntaxí řízený překlad

Syntaxí řízený překlad Příklad E → E + T + (E → E + T ) E → T T → T * F * T → F F → ( E ) F → i i Syntaxí řízený překlad

Syntaxí řízený překlad Příklad - derivace E => E + T + => T + T + => F + T + => i i + T + => i i + T * F * + => i i + F * F * + => i i + i i * F * + => i i + i i * i i * + Syntaxí řízený překlad

Syntaxí řízený překlad Homomorfismy Vstupní homomorfismus: (x) = x, x  (N  ) = , x   Výstupní homomorfismus: (x) = x, x  (N  ) = , x   Syntaxí řízený překlad

Syntaxí řízený překlad Příklad (E + T +) = E + T (E + T +) = E T + (i i + i i * i i * +) = i + i * i (i i + i i * i i * +) = i i i * + Syntaxí řízený překlad

Syntaxí řízený překlad Definice: Překlad generovaný překladovou gramatikou: T(G) = {(x,y) | S =>* z, z  ()*, x = (z), vstupní věta y = (z)} výstupní věta Syntaxí řízený překlad

Syntaxí řízený překlad Atributovaný překlad Rozšíření bezkontextové gramatiky o kontextové vlastnosti → „gramatika s parametry“ Jednotlivé symboly mohou mít přiřazeny parametry – atributy Atributy se předávají podobně jako vstupní a výstupní argumenty funkcí Syntaxí řízený překlad

Syntaxí řízený překlad Atributová gramatika Definice: Atributová překladová gramatika GAT = (GT, A, F) GT – překladová gramatika (= -> atributová gramatika) A – množina atributů F – sémantická pravidla (pravidla pro výpočet hodnot atributů) Syntaxí řízený překlad

Syntaxí řízený překlad Množina atributů X  (N) I(X) - množina dědičných atributů S(X) - množina syntetizovaných atributů Dědičné atributy startovacího neterminálu jsou zadány předem. Syntetizované atributy terminálních symbolů jsou zadány předem (lexikální analyzátor) Syntaxí řízený překlad

Syntaxí řízený překlad Sémantická pravidla pr: X0 -> X1X2 … Xn X0N, Xi(N) a) d=frd,k(a1,a2,… ,an) dI(Xk), 1kn b) s=frs,0(a1,a2,… ,an) sS(X0) c) s=frs,k(a1,a2,… ,an) sS(Xk), Xk a,b) ai je atribut symbolu Xj, 0jn c) ai je dědičný atr. symbolu Xf, Xf Syntaxí řízený překlad

Syntaxí řízený překlad Sémantická pravidla a) Dědičné atributy symbolu na pravé straně pravidla b) Syntetizované atributy neterminálního symbolu na levé straně pravidla c) Syntetizované atributy výstupních symbolů na pravé straně pravidla Syntaxí řízený překlad

Příklad – výpočet hodnoty výrazu Syntetizované atributy: E.val - hodnota výrazu T.val - hodnota podvýrazu F.val - hodnota operandu num.lexval – hodnota číselné konstanty Syntaxí řízený překlad

Syntaxí řízený překlad Příklad Gramatika E -> E’ + T E -> T T -> T’ * F T -> F F -> (E) F -> num Sémantická pravidla E.val = E’.val + T.val E.val = T.val T.val = T’.val * F.val T.val = F.val F.val = E.val F.val = num.lexval Syntaxí řízený překlad

Syntaxí řízený překlad Příklad E.val = 19 3*5+4 + E.val = 15 T.val = 4 T.val = 15 F.val = 4 * num.val = 4 T.val = 3 F.val = 5 T.val = 3 num.val = 5 num.val = 3 Ohodnocený derivační strom Syntaxí řízený překlad

Syntaxí řízený překlad Poznámky sémantické funkce v atributové gramatice nemohou mít vedlejší efekty vstup/výstup (např. generovaného kódu) globální proměnné (např. tabulka symbolů) syntaxí řízená definice – bez omezení Syntaxí řízený překlad

Příklad – deklarace proměnných (1) D -> T L (2) T -> int (3) T -> real (4) L -> L’ , id (5) L -> id L.type := T.type T.type := integer T.type := real L’.type := L.type dcl(id.ptr, L.type) dcl(id.ptr, L.type) Syntaxí řízený překlad

Syntaxí řízený překlad Příklad Dědičné atributy: L.type Syntetizované atributy: T.type, id.ptr real id1,id2,id3 D T.type = real L.type = real real L.type = real id3 , L.type = real id2 , id1 Syntaxí řízený překlad

Syntaxí řízený překlad Definice L-atributová definice A -> X1 … Xn Dědičné atributy symbolu Xj závisejí jen na: atributech symbolů X1, … ,Xj-1 (tj. symbolech z téhož pravidla vlevo od symbolu Xj ) dědičných atributech symbolu A (tj. symbolu na levé straně pravidla) Použití: LL(1) překlad Syntaxí řízený překlad

Syntaxí řízený překlad Překladové schéma Syntaxí řízená definice se sémantickými akcemi umístěnými kdekoliv na pravé straně pravidla Posloupnost sémantických akcí je přesně definována Syntaxí řízený překlad

Syntaxí řízený překlad Příklad E -> T R R -> + T { print(‘+’); } R’ |  T -> num { print(num.val); } Syntaxí řízený překlad

Návrh překladového schematu Dědičný atribut symbolu na pravé straně vypočte akce umístěna před ním. Akce nesmí používat syntetizované atributy symbolů vpravo od ní. Hodnota syntetizovaného atributu neterminálu na levé straně pravidla se vypočte až po určení všech atributů, na které se odkazuje - obvykle až na konci pravidla Syntaxí řízený překlad

Překlad při analýze rekurzivním sestupem Syntaktický zásobník - řízení překladu Atributový zásobník - ukládání atributů explicitní vs. implicitní zásobník implicitní zásobník – rekurze, lokální proměnné Atributy parametry podprogramů (N) globální proměnné  Syntaxí řízený překlad

Překlad při analýze rekurzivním sestupem Atributy dědičné - vstupní parametry syntetizované - výstupní parametry Sémantické akce Přímo na odpovídajících místech v podprogramech pro analýzu pravidel Hodnoty syntetizovaných atributů musí být definovány! (e-pravidla, zotavení) Syntaxí řízený překlad

Syntaxí řízený překlad Příklad E -> T {R.i := T.val} R {E.val := R.s} R -> addop T {if addop.op=add then R1.i := R.i+T.val else R1.i := R.i-T.val } R1 {R.s := R1.s} |  {R.s := R.i} T -> num {T.val := num.val} Syntaxí řízený překlad

Syntaxí řízený překlad Příklad addop.op … var lexop:char; ‘+’/‘-’ num.val … lexval:integer; R.i - dědičný atribut (levý operand) R.s - dočasný výsledek, synt. atribut T.val - syntetizovaný attribute Syntaxí řízený překlad

Syntaxí řízený překlad Příklad void E(int& val) { int val1; T(val1); R(val1, val); } Syntaxí řízený překlad

Syntaxí řízený překlad Příklad void R(int i, int& s) { if( sym == ‘+’ || sym == ‘-’ ) { char op=lexop; int val; T(val); if( op==‘+’ ) R(i+val,s) else R(i-val,s); } else s = i; } Syntaxí řízený překlad

Syntaxí řízený překlad Příklad void T(int& val) { if( sym == num ) { val=lexval; // nestačí expect(num) lex(); } else { error(); // po zotavení musí val=0; // být val definováno } } Syntaxí řízený překlad