Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.
|
|
- Viktor Alois Beránek
- před 6 lety
- Počet zobrazení:
Transkript
1 Sémantická analýza Šárka Vavrečková Ústav informatiky, FPF SU Opava Poslední aktualizace: 19. listopadu 2009
2 Definice (Sémantická analýza) Vstup: konstrukce symbolů vytvořená syntaktickým analyzátorem. Výstup: cílový kód, některá z forem interního kódu nebo interpretace. Syntaktické chyby: souvisí s významem symbolů a skupin symbolů, např. použití nedeklarované proměnné v kódu, nekompatibilní datový typ proměnné ve výrazu či argumentu funkce
3 Tabulka symbolů Tabulka symbolů může vypadat takto: Název Typ Délka Deklarováno Adresa Použito delky integer array B A... N I byte 1 B A... A pocet integer 4 B A... N x1 real 6 B A... N z1 nedefinováno 0 N 0 A
4 Druhy informací Tabulka symbolů Proměnná: název, typ, adresa (při interpretaci může být přímo hodnota), délka typu, atd. Uživatelsky definovaný datový typ: základní typ (array, record, structure, enum, apod.), další údaje podle základního typu délka pole, další použité typy (například integer pro pole celých čísel), atd. Funkce: název, návratová hodnota (typ), adresa, datové typy parametrů (můžou být odkazy na jiné řádky tabulky), atd. Konstanta: název, bázový typ, adresa nebo přímo hodnota. Třída: název, předek (může být odkaz na řádek tabulky), vlastnosti a vnitřní proměnné mohou být na samostatných řádcích tabulky, metody, atd. Objekt: název, odkaz na řádek tabulky se třídou, adresa, atd.
5 Tabulka symbolů Účel údaje jsou do tabulky řazeny při jejich deklaraci, včetně proměnných, kontrola, zda proměnná použitá ve výpočtu již byla deklarována (také funkce apod.), typová kontrola, zjištění možností přetypování při kombinaci různých datových typů ve výrazu, při interpretaci můžeme přímo využít pro ukládání datových typů, proměnných, funkcí apod.), při generování cílového kódu zjišťujeme informace potřebné pro vyhrazení místa v paměti pro jednotlivé prvky tabulky, atd.
6 Implementace Tabulka symbolů jednodušší jazyk: dynamická, řádky jsou variantní záznamy, důležitá je možnost rychlého vyhledávání použití řazení, hashování, indexace, indexové soubory, stromy apod., složitější případy: databáze.
7 Tabulka symbolů kompilačního překladače TDatovyTyp delka ISA typ t_int t_float t_array t_rec a_typ a_delka 1 r_prvky 1 n TDatovyTyp 1 TDatovyTyp TObjekt nazev ISA obj poc_par o_konst o_prom o_typ o_fce k_typ p_typ t_typ f_typ f_par n k_hodnota p_adresa TDatovyTyp TDatovyTyp TDatovyTyp TDatovyTyp TDatovyTyp
8 Implementace pro kompilační překladač type TTypObjektu = (o_konst, o_prom, o_typ, o_fce); TTypHodnoty = (t_int, t_float, t_array, t_rec); PDatovyTyp = ^TDatovyTyp; TDatovyTyp = record delka: integer; case typ: TTypHodnoty of t_int, t_float: (); t_array: (a_typ: PDatovyTyp; a_delka: integer); t_rec: (r_prvky: PDatovyTyp); // dynamické pole prvků end; PObjekt = ^TObjekt; TObjekt = record dalsi: PObjekt; nazev: string[maxdelkanazvu]; case obj: TTypObjektu of o_konst: (k_hodnota: THodnota; k_typ: TDatovyTyp); o_prom: (p_adresa: integer; p_typ: TDatovyTyp); o_typ: (t_typ: TDatovyTyp); o_fce: (f_typ: TDatovyTyp; f_par: ^TDatovyTyp; poc_par: byte); end; var TabulkaSymbolu: ^TObjekt;
9 Implementace pro interpretační překladač type TTypObjektu = (o_konst, o_prom, o_typ, o_fce); TTypHodnoty = (t_int, t_float, t_array, t_rec); PHodnota = ^THodnota; THodnota = record case typ: TTypHodnoty of t_int: (i: integer); t_float: (f: float); t_array: (a_typ: TTyp; a_delka: integer; a_prvky: PHodnota); t_rec: (r_prvky: PHodnota); end; PObjekt = ^TObjekt; TObjekt = record dalsi: PObjekt; nazev: string[maxdelkanazvu]; hodnota: THodnota; // u funkce návratová hodnota case obj: TTypObjektu of o_konst, o_prom, o_typ: (); o_fce: (f_par: PObjekt; poc_par: integer); end; var TabulkaSymbolu: ^TObjekt;
10 Řazení a vyhledávání u interpretu se tabulka využívá při každé deklaraci nové proměnné a při každém použití proměnné, příp. funkce, konstanty apod. při každém přístupu je nutné tabulku prohledávat, tj. vyhledávání je frekventovaná operace konstrukce: statický nebo dynamický seznam položek, binární strom, řídká tabulka, apod. vyhledávání: lineární, binární, použití indexů, hashování (podle konstrukce tabulky) řazení položek v tabulce: nový prvek řadíme na konec nový prvek řadíme podle abecedy nebo jiného kritéria pro vyhledávání řešení závislostí včetně kruhových položka definovaná přes položku, která ještě není v tabulce přítomna, je třeba brát v
11 Syntaktický analyzátor Kdo vytváří tabulku symbolů? může doplňovat i syntaktické informace (datový typ proměnné apod.) lexikální analyzátor je jednodušší Lexikální analyzátor vkládá pouze názvy prvků (atribut symbolů typu S ID), ostatní informace jsou dodány následujícími fázemi překladu ve výstupu lexikálního analyzátoru se v symbolech typu S ID nemusí uvádět hodnota atributu (tj. třeba název proměnné), stačí ukazatel do tabulky symbolů, který zabere mnohem méně místa v dalších fázích při práci s těmito symboly již není třeba prohledávat tabulku symbolů, ukazatel vede přímo na konkrétní místo
12 Tabulku vytváří lexikální analyzátor type TSymbol = record case typ: TTypSymbolu of S_NUMINT: (i: integer); S_NUMFLT: (f: float); S_ID: (hodn: ^TObjekt); end;
13 Řešení pro jazyk s blokovou strukturou programu Požadavky platí vše, co dříve, musí být rozlišeny globální a lokální údaje a vyřešen správný přístup k nim zachycen vztah podřízenosti bloků, každý blok má vlastní tabulku symbolů.
14 Řešení pro jazyk s blokovou strukturou programu Příklad V hlavním bloku jsou deklarovány proměnné A, B. Uvnitř bloku je volán blok č. 2, ve kterém jsou proměnné C, D. Po ukončení bloku č. 2 je volán blok č. 3 s proměnnými X1, E. Uvnitř bloku č. 3 je volán blok č. 4 s proměnnými B, C, F. 1 A,B 2 C,D 3 X1,E 4 B,C,F
15 Řešení pro jazyk s blokovou strukturou programu Začátek bloku 1: Začátek bloku 2: Začátek bloku 3: Začátek bloku 4: Tabulka bloku 1 Tabulka bloku 2 Tabulka bloku 3 Tabulka bloku 4 Tabulka bloku 1 Tabulka bloku 1 Tabulka bloku 3 Tabulka bloku 1
16 Definice (Intermediální kód) Intermediální kód je výstupní kód sémantické analýzy. Má různé varianty s ohledem na další použití tohoto kódu. Vlastnosti Intermediální kód pro kompilační překladač musí být snadno optimalizovatelný (například grafovými algoritmy), snadno přepsatelný do strojového kódu nebo assembleru. Intermediální kód pro interpretační překladač musí být snadno interpretovatelný, pokud možno bez dalších větších úprav.
17 Intermediální kód Základní varianty 1 3-adresový kód, 2 sémantický strom (ohodnocený syntaktický strom), 3 postfixový tvar (polská notace).
18 3-adresový kód Příkaz v 3-adresovém kódu má tvar základní: (operátor, argument 1, argument 2, výsledek), zhuštěný: (operátor, argument 1, argument 2).
19 3-adresový kód Příkaz v 3-adresovém kódu má tvar základní: (operátor, argument 1, argument 2, výsledek), zhuštěný: (operátor, argument 1, argument 2). Příklad základní forma A := (-B) * (C + D) Upravíme: T1 := -B T2 := C + D T3 := T1 * T2 A := T3
20 3-adresový kód Příkaz v 3-adresovém kódu má tvar základní: (operátor, argument 1, argument 2, výsledek), zhuštěný: (operátor, argument 1, argument 2). Příklad základní forma A := (-B) * (C + D) Upravíme: T1 := -B T2 := C + D T3 := T1 * T2 A := T3 Operátor Arg1 Arg2 Výsledek 1 uminus B T1 2 + C D T2 3 * T1 T2 T3 4 := T3 A
21 3-adresový kód Příkaz v 3-adresovém kódu má tvar základní: (operátor, argument 1, argument 2, výsledek), zhuštěný: (operátor, argument 1, argument 2). Příklad zhuštěná forma A := (-B) * (C + D) Upravíme: T1 := -B T2 := C + D T3 := T1 * T2 A := T3 Operátor Arg1 Arg2 1 uminus B 2 + C D 3 * := A 3
22 Složitější příklad for i := x to y do v := v + x Návěští Op Arg1 Arg2 Výsl := i x i CMP i y JG konec_for zacatek_for: + v x T1 := v T1 v INC i CMP i y JL zacatek_for konec_for:
23 3-adresový kód Vlastnosti dobře se optimalizuje (i když ne grafovými algoritmy), dobře se přepisuje na assembler i strojový kód, hůře se přímo interpretuje, výhodná pro kompilační překladač, nevhodná pro interpretaci.
24 Příklad 1: Sémantický strom Příklad 2: X := A + 2 * B X := A * 2 + B := := x + x + A * * B 2 B A 2
25 Příklad 3: Sémantický strom for i := 2 to 7 do x := x * i <for-to-do> := 7 := i 2 x * x i
26 Sémantický strom Vlastnosti každý příkaz včetně bloku je reprezentován stromem, posloupnost příkazů je reprezentovaná (lineárním) seznamem stromů, výborně se přímo interpretuje (můžeme reprezentovat dynamickým stromem), lze propojit s grafickým editorem, který zprostředkuje práci s dynamickou strukturou, určité omezené možnosti optimalizace grafovými algoritmy, špatně se přepisuje na assembler nebo strojový kód, vhodný spíše pro interpretaci.
27 Postfixový tvar Převod do postfixu: Příklad 1: (1 + 2) * (3 + 4) = *
28 Postfixový tvar Převod do postfixu: Příklad 1: (1 + 2) * (3 + 4) = * 1 1
29 Postfixový tvar Převod do postfixu: Příklad 1: (1 + 2) * (3 + 4) = *
30 Postfixový tvar Převod do postfixu: Příklad 1: (1 + 2) * (3 + 4) = *
31 Postfixový tvar Převod do postfixu: Příklad 1: (1 + 2) * (3 + 4) = *
32 Postfixový tvar Převod do postfixu: Příklad 1: (1 + 2) * (3 + 4) = *
33 Postfixový tvar Převod do postfixu: Příklad 1: (1 + 2) * (3 + 4) = *
34 Postfixový tvar Převod do postfixu: Příklad 1: (1 + 2) * (3 + 4) = * * 21
35 Postfixový tvar Převod do postfixu: Příklad 2: IF a + b <> 0 THEN x := 10 ELSE x := a + b a + b x := 10 ; x := a + b ; ; konec IF a b JZ x 10 := ; x := a b + ; ; konec IF a b JZ x 10 x := a b + K:
36 Postfixový tvar Vlastnosti dá se optimalizovat, i když s obtížemi, dobře se přepisuje na assembler i strojový kód, dobře se interpretuje s použitím jediného zásobníku, vhodný pro interpretační i kompilační překladač.
37 Typová kontrola a přetypování Příklad stanovení datových typů operandů Pro operátor + mohou platit tyto předpisy: oba operandy jsou celá čísla, pak výsledek je celé číslo, oba operandy jsou reálná čísla, pak výsledek je reálné číslo, oba operandy jsou znaky, pak výsledek je řetězec (zřetězení těchto dvou znaků), oba operandy jsou řetězce, pak výsledek je řetězec (zřetězení těchto dvou řetězců).
38 Příklad přetypování Typová kontrola a přetypování Pro jazyk C je posloupnost pro čísla stanovena takto: int unsigned int long unsigned long float double long double Nejmenší prioritu z uvedených má int. Operandy typu char a short int jsou při výpočtu výrazu vždy konvertovány na int. Operandy typu unsigned char a unsigned short konverzí na int procházejí jen tehdy, když se vejdou do datového typu, tj. když nedojde k přetečení.
39 Silně typované jazyky Typovost jazyka provádějí při každé operaci kontrolu datových typů důsledkem nesrovnalostí zjištěných při této kontrole bývá chybové hlášení nebo dynamické přetypování některé silně typované jazyky vyžadují uvádění datového typu v deklaracích, jiné nikoliv pro každou operaci se vyžadují operandy konkrétního typu jsou nazývány typově bezpečné, což ale neznamená, že v nich nelze dělat chyby Příklady: Ada, Java, C#, Python
40 Slabě typované jazyky Typovost jazyka neprovádějí tolik kontrol datových typů obecně je možné operaci určenou pro data jednoho datového typu použít na data jiného datového typu, alespoň do určité míry Toto chování může být zdrojem mnoha běhových chyb Příklady: C, Perl V jazyce C je například možné za určitých okolností sečíst celé číslo a řetězec: printf("%d", (1 + "1"));
41 Netypové jazyky Typovost jazyka ve skutečnosti prakticky neexistují, každý jazyk nějakým způsobem zachází s alespoň jedním (vnitřním) datovým typem snad jen některé skriptovací jazyky, textové shelly Jazyky, u kterých lze nastavit typové chování například VisualBasic.NET se může chovat jako slabě nebo silně typovaný kompilátorová direktiva Option Explicit On (silně, nyní výchozí nastavení) nebo Option Explicit Off (slabě)
42 Definice (Statická sémantika) Sémantika programu popisuje pravidla deklarace a definice jednotlivých prvků jazyka (jak mají deklarace vypadat, zda jsou nutné apod.), významu příkazů a jiných jazykových konstrukcí, typu parametrů těchto konstrukcí apod., provádí statickou typovou kontrolu a základní práci s tabulkou symbolů. Statická sémantika se řeší při překladu programu.
43 Sémantika programu Definice (Dynamická sémantika) se týká především významu jednotlivých jazykových konstrukcí (co se má provést, když je v programu napsáno..., priorita operátorů, atd.). Dynamickou sémantiku řešíme přímo za běhu programu. Je náročná zvláště u programovacích jazyků s rekurzivním voláním podprogramů. Je nutné vést evidenci zvlášť o všech voláních téhož podprogramu, což se řeší vytvářením aktivačních záznamů pro jednotlivá volání a jejich ukládáním do zásobníku.
44 Staticky typované jazyky vyžadují uvádění datového typu u každé deklarace, nelze deklarovat proměnnou, objekt nebo funkci bez zadání datového typu prakticky všechny typové kontroly jsou prováděny při překladu (tj. jsou statické), již během překladu má být u každé proměnné jasné, jakého je datového typu nabízejí možnost explicitního přetypování, které však v praxi obvykle slouží především k obcházení typových kontrol výhodou je především lepší možnost odladění typových chyb, nevýhodou menší pružnost jazyka a větší složitost některých programových konstrukcí a kód programů bývá výrazně delší z běhových chyb se vyskytuje především přetečení datového typu Příklady: Java, Ada, C a jeho pokračovatelé
45 Dynamicky typované jazyky nevyžadují uvádění datových typů v deklaracích, mnohé dokonce nevyžadují ani samotné deklarace obvykle je první použití proměnné vázáno na formu l-hodnoty, datový typ a hodnota nově vytvořené proměnné se řídí výsledkem vyhodnoceného výrazu velká část typových kontrol (ne-li všechny) se provádí dynamicky za běhu programu (dynamická sémantika), běžně se provádí automatické přetypování a pro uživatele také není problém kdykoliv změnit datový typ proměnné. výhodou je výrazně kratší kód a vyšší přehlednost kódu, nevýhodou možnost výskytu běhových typových chyb při provozu programu. Příklady: Python, SmallTalk včetně jeho volně šiřitelné implementace Squeak, Lisp, Ruby, Prolog
46 Statické, dynamické, silné, slabé většina dynamicky typovaných jazyků provádí silné typové kontroly (za běhu programu) Java, C a Ada jsou staticky silně typované Python je dynamicky silně typovaný staticky typovaný jazyk se slabou typovou kontrolou je například C
Překladač a jeho struktura
Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008 Definice
VíceÚvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
VíceMaturitní otázky z předmětu PROGRAMOVÁNÍ
Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti
VíceProgramovací jazyk Pascal
Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce
VíceČtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:
Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury
VíceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
VícePoslední aktualizace: 14. října 2011
Lexikální analýza Překladače, přednáška č. 2 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 14. října 2011 Symboly Co je to
VíceO datových typech a jejich kontrole
.. O datových typech a jejich kontrole Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Typová kontrola Programovací techniky O datových typech
VíceVirtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.
Virtuální počítač Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor Virtuální počítač Překladač Překladač : Zdrojový jazyk Cílový jazyk Analytická část:
Více2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
VíceReprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)
VíceStruktura programu v době běhu
Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů
VíceVyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky
Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové
Vícetypová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
VíceNáznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.
Jednoduchý interpretační překladač Náznak ukázky syntaxe a sémantiky pro projekt Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 8. ledna 2008 1 Syntaktické
VíceZákladní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě
Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické
VíceSyntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava
Implementace LL(1) překladů Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 6. ledna 2012 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku
VíceSada 1 - Základy programování
S třední škola stavební Jihlava Sada 1 - Základy programování 06. Proměnné, deklarace proměnných Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284
VíceLexikální analýza Teorie programovacích jazyků
Lexikální analýza Teorie programovacích jazyků doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Osnova dnešní přednášky 1 Úvod do teorie překladačů kompilátor a interpret
VíceProgramovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)
Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná
VíceAlgoritmizace a programování
Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech
VíceObsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program
Denotační sémantika programovacího jazyka doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 Obsah přednášky Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup
VícePascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7
Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí
VíceMATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
VíceProgramovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)
Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog
VíceVÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu
VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632
Více1. Programování proti rozhraní
1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní
VíceProgramovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)
Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog
VíceGenerování vnitřní reprezentace programu
Generování vnitřní reprezentace programu Miroslav Beneš Dušan Kolář Možnosti překladu Interpretace Okamžité provádění programu Překlad do instrukcí procesoru Závislost na konkrétním typu procesoru Překlad
VíceSdílení dat mezi podprogramy
Sdílení dat mezi podprogramy Datové objekty mohou být mezi podprogramy sdíleny pomocí ne-lokálních referenčních prostředí, která jsou vytvářena na základě æ explicitních modifikací (formální parametry
VíceStrukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele
Strukturu lze funkci předat: hodnotou i pomocí ukazatele pouze pomocí ukazatele (reference na strukturu) pouze hodnotou (kopie struktury) (pole[i])+j adresa prvku na souřadnicích i, j adresa i-tého řádku
Vícetype Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;
Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá
VíceZákladní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě
Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické
VíceALGORITMIZACE A PROGRAMOVÁNÍ
Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení
VíceÚvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie
Úvod z historie RNDr. Miroslav Benedikovič John Louis von Neumann r. 1946 nová koncepce počítače (společná paměť pro kód programu a zpracovávaná data) vytvořila podmínky pro vznik softvéru na přípravu
VíceObsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
VíceSprávné vytvoření a otevření textového souboru pro čtení a zápis představuje
f1(&pole[4]); funkci f1 předáváme hodnotu 4. prvku adresu 4. prvku adresu 5. prvku hodnotu 5. prvku symbolická konstanta pro konec souboru je eof EOF FEOF feof Správné vytvoření a otevření textového souboru
VíceAlgoritmizace a programování
Algoritmizace a programování Strukturované proměnné Struktura, union Jazyk C České vysoké učení technické Fakulta elektrotechnická A8B14ADP Jazyk C - Strukturované proměnné Ver.1.10 J. Zděnek 20151 Struktura
VíceNMIN102 Programování /2 Z, Zk
NMIN102 Programování 2 --- 2/2 Z, Zk Pavel Töpfer Katedra softwaru a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer Pavel
Vícedovolují dělení velkých úloh na menší = dekompozice
Podprogramy dovolují dělení velkých úloh na menší = dekompozice Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
VíceOperátory, výrazy. Tomáš Pitner, upravil Marek Šabo
Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v
VíceDatové typy a struktury
atové typy a struktury Jednoduché datové typy oolean = logická hodnota (true / false) K uložení stačí 1 bit často celé slovo (1 byte) haracter = znak Pro 8-bitový SII kód stačí 1 byte (256 možností) Pro
VíceImplementace LL(1) překladů
Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku
VíceReprezentace dat v informačních systémech. Jaroslav Šmarda
Reprezentace dat v informačních systémech Jaroslav Šmarda Reprezentace dat v informačních systémech Reprezentace dat v počítači Datové typy Proměnná Uživatelské datové typy Datové struktury: pole, zásobník,
VíceADT/ADS = abstraktní datové typy / struktury
DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní
VíceZákladní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou
VíceOpakování programování
Opakování programování HW návaznost - procesor sběrnice, instrukční sada, optimalizace rychlosti, datové typy, operace (matematické, logické, podmínky, skoky, podprogram ) - paměti a periferie - adresování
VíceSII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:
SII - Informatika Způsob vyhodnocení: Při vyhodnocení budou za nesprávné odpovědi strhnuty body. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá: a) sekundární klíč b)
VíceUplatnění metod na zvolený jazyk
Uplatnění metod na zvolený jazyk Při výběru mezi metodami výše popsanými se řídíme především podle typu symbolů, které jazyk obsahuje. Výhodná bývá často kombinace těchto metod nejdřív použijeme metodu
VícePODPROGRAMY PROCEDURY A FUNKCE
PODPROGRAMY PROCEDURY A FUNKCE Programy bez podprogramů Příklady: a) Napište program, který na obrazovku nakreslí čáru složenou ze znaků pomlčka. program Cara; b) Napište program, který na obrazovku nakreslí
VíceOdvozené a strukturované typy dat
Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu
VíceZákladní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí
02 Jazyk C - je imperativní říkáme, co se má udělat, voláme příkazy - další imperativní jazyky: Pascal, Java, C/C++ apod. - na rozdíl od jazyků deklarativních např. Prolog, Haskell, Scheme, Lisp (funkcionální
VíceÚvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
VíceIUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje
Konstanty I možnosti: přednostně v paměti neexistuje žádný ; o preprocesor (deklarace) #define KONSTANTA 10 o konstantní proměnná (definice) const int KONSTANTA = 10; příklad #include v paměti
VíceTÉMATICKÝ OKRUH TZD, DIS a TIS
TÉMATICKÝ OKRUH TZD, DIS a TIS Číslo otázky : 27. Otázka : Principy moderních překladačů, virtuální stroj. Obsah : 1.Překladač a jeho struktura 2.Druhy překladačů 3.Hlavní části překladače 3.1 Lexikální
VíceMasarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace
Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace Číslo projektu Číslo materiálu Autor Průřezové téma Předmět CZ.1.07/1.5.00/34.0565 VY_32_INOVACE_284_Programovací_jazyky
VícePaměť počítače. alg2 1
Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových
VíceTest prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem
Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel
VíceAlgoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
VíceÚvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií
1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední
VíceUkazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný
Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný typem proměnné - ukazatel je tedy adresa společně s
VíceProgram a životní cyklus programu
Program a životní cyklus programu Program algoritmus zapsaný formálně, srozumitelně pro počítač program se skládá z elementárních kroků Elementární kroky mohou být: instrukce operačního kódu počítače příkazy
Více9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>
9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte
VíceProgramování v C++ 1, 1. cvičení
Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených
Více8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním
VíceČasová a prostorová složitost algoritmů
.. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová
Více- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku
Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová
VíceMatematika v programovacích
Matematika v programovacích jazycích Pavla Kabelíková am.vsb.cz/kabelikova pavla.kabelikova@vsb.cz Úvodní diskuze Otázky: Jaké programovací jazyky znáte? S jakými programovacími jazyky jste již pracovali?
VíceIB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat
IB015 Neimperativní programování Organizace a motivace kurzu, programovací jazyk Haskell Jiří Barnat Sekce IB015 Neimperativní programování 01 str. 2/36 Organizace kurzu Cíle kurzu IB015 Neimperativní
VíceImplementace překladače imperativního jazyka IFJ05
Dokumentace ke společnému projektu IFJ a IAL Implementace překladače imperativního jazyka IFJ05 16. prosince 2005 řešitelé David Bařina xbarin02 Kamil Dudka xdudka00 Jakub Filák xfilak01 Lukáš Hefka xhefka00
VíceNázev předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:
Plán předmětu Název předmětu: Algoritmizace a programování (PAAPK) Školní rok: 2007/2008 Forma studia: Kombinovaná Studijní obory: DP, DI, PSDPI, OŽPD Ročník: I Semestr: II. (letní) Typ předmětu: povinný
Vícepřetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
VíceAlgoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Algoritmus Daniela Szturcová Tento
Více8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace
1) Charakterizujte křížový překladač Překlad programu probíhá na jiném procesoru, než exekuce. Hlavním důvodem je náročnost překladače na cílovém stroji by ho nemuselo být možné rozběhnout. 2. Objasněte
VíceAlgoritmizace a programování
Algoritmizace a programování Řídicí struktury, standardní metody Problematika načítání pomocí Scanner Některé poznámky k příkazům Psaní kódu programu Metody třídy Math Obalové třídy primitivních datových
Více5 Přehled operátorů, příkazy, přetypování
5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování
VíceTematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných
Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro
VíceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
VíceInterpret jazyka IFJ2011
Dokumentace projektu Interpret jazyka IFJ2011 Tým číslo 093, varianta b/3/i: 20 % bodů: Cupák Michal (xcupak04) vedoucí týmu 20 % bodů: Číž Miloslav (xcizmi00) 20 % bodů: Černá Tereza (xcerna01) 20 % bodů:
Víceint => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:
13.4.2010 Typová konverze - změna jednoho datového typu na jiný - známe dva základní implicitní ("sama od sebe") a explicitní (výslovně vyžádána programátorem) - C je málo přísné na typové kontroly = dokáže
VíceDa D to t v o é v ty t py IB111: Datové typy
Datové typy IB111: Datové typy Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité
VíceZpracování deklarací a přidělování paměti
Zpracování deklarací a přidělování paměti Účel deklarací -pojmenování objektů -umístění objektů v paměti Tabulka symbolů -uchovává informace o objektech -umožňuje kontextové kontroly -umožňuje operace
VíceProgramovací jazyk C++ Hodina 1
Programovací jazyk C++ Hodina 1 Používané překladače Bloodshed Dev C++ http://www.bloodshed.net/devcpp.html CodeBlocks http://www.codeblocks.org pokud nemáte již nainstalovaný překladač, stáhněte si instalátor
VíceDynamické datové typy a struktury
.. a Programovací techniky doc. Ing. Jiří Rybička Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Programovací techniky a 2 / 18 Uchovávají adresu v paměti Programovací techniky a 2 / 18 Uchovávají
VíceProgramování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
VíceJak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické
Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean
Více1. D Y N A M I C K É DAT O V É STRUKTUR Y
1. D Y N A M I C K É DAT O V É STRUKTUR Y Autor: Petr Mik Abychom se mohli pustit do dynamických datových struktur, musíme se nejdřív podívat na datový typ ukazatel. 1. D AT O V Ý TYP U K A Z AT E L Datové
VíceNPRG030 Programování I, 2015/16 1 / :25:32
NPRG030 Programování I, 2015/16 1 / 21 22. 10. 2015 13:25:32 Podprogramy Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X
VícePole a kolekce. v C#, Javě a C++
Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java
VíceJazyk C++ II. Šablony a implementace
Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy
VíceÚvod do programování. Lekce 1
Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -
VíceRekurzivní algoritmy
Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS
VíceZPRO v "C" Ing. Vít Hanousek. verze 0.3
verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout
VíceVÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu
VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632
VíceIB111 Programování a algoritmizace. Programovací jazyky
IB111 Programování a algoritmizace Programovací jazyky Programovací jazyky Programovací jazyk Prostředek pro zápis algoritmů, jež mohou být provedeny na počítači Program Zápis algoritmu v programovacím
VíceAlgoritmizace a programování
Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,
VíceDatové typy strana 29
Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo
VíceFormátové specifikace formátovací řetězce
27.2.2007 Formátové specifikace formátovací řetězce - je to posloupnost podle které překladač pozná jaký formát má výstup mít - posloupnosti začínají znakem % a určující formát vstupu/výstupu - pokud chcete
VíceVstupní požadavky, doporučení a metodické pokyny
Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem
VíceKonstruktory překladačů
Konstruktory překladačů Miroslav Beneš Dušan Kolář Konstruktor Lex generátor lexikálních analyzátorů M. E. Lesk, 1975 - pro OS Unix flex - Vern Paxson, 1990 - GNU verze určeno pro generování výstupu v
Více