Interpret jazyka IFJ2011
|
|
- Vít Neduchal
- před 8 lety
- Počet zobrazení:
Transkript
1 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ů: Hradecký Michal (xhrade08) 20 % bodů: Latta Martin (xlatta00) VYSOKÉ UČENÍ TEHNICKÉ V BRNĚ, FAKULTA INFORMAČNÍCH TECHNOLOGIÍ
2 Obsah 1. Implementace Lexikální analyzátor Tabulka symbolů Syntaktický analyzátor Interpret Řetězcové algoritmy Práce v týmu Organizace Problémy Rozdělení práce Metriky Použité zdroje
3 1. Implementace Překladač se skládá z částí popsaných na přednáškách předmětu IFJ a je spojen do celku programem zapsaným v souboru main.c. 1.1 Lexikální analyzátor Lexikální analyzátor je částí projektu zpracovávající bezprostředně zdrojový kód vstupního programu. Je důležitý především svou funkcí scanner_dalsi_token, která načítá a vrací následující typ tokenu včetně jeho řetězcové reprezentace (komentáře v souboru jsou automaticky přeskakovány). Funkce rovněž vrací pozici tokenu v souboru kvůli případnému chybovému výpisu. Chyba alokace paměti pro interní řetězec je indikována vrácením speciálního typu tokenu TYP_CHYBA_ALOKACE. Zbývající dvě funkce lexikálního analyzátoru slouží k otevření a zavření zdrojového souboru. Lexikální analyzátor je implementován jako konečný automat, jehož funkce je popsána níže uvedeným grafem. Automat rozezná základní typ tokenu, načež se může stát, že ten bude dále upřesněn např. klíčové slovo se nejprve načte jako identifikátor a až posléze se porovnáním s každým z množiny daných řetězců dospěje k tomu, že se jedná o klíčové slovo. Podobným způsobem se řeší korektnost načteného řetězcového literálu. Tento způsob implementace byl zvolen za cílem redukovat jinak zbytečně velký počet stavů konečného automatu. Načítání teoreticky nekonečného řetězce je vyřešeno alokací místa v paměti o určité konstantní velikosti (tedy klasický načítací buffer). Na toto místo se postupně načítají znaky a při dosažení hranice vymezeného prostoru je paměťový prostor navýšen opět o konstantní velikost. Obrázek 1 - konečný automat lexikálního analyzátoru 2
4 1.2 Tabulka symbolů Tabulka symbolů slouží v programu k ukládání informací o proměnných a funkcích. Využívá se jak v syntaktické a sémantické analýze, tak při interpretaci. Skládá se ze dvou částí implementovaných jako binární vyhledávací stromy, kde klíčem uzlu je textový řetězec. Tyto dvě části jsou: globální tabulka symbolů uchovává informace o funkcích lokální tabulka symbolů uchovává informace o proměnných Obrázek 2 tabulka symbolů každá položka globální tabulky obsahuje jedinečný identifikátor funkce a počet jejích parametrů, aby bylo možné během syntaktické analýzy určit, kolik parametrů se má při volání funkce doplnit, popř. ignorovat. Dále má každá položka svou vlastní lokální tabulku, tzn. každá funkce si uchovává informace o svých proměnných (do těchto proměnných se počítají i parametry funkce). Tabulka jakožto abstraktní datový typ definuje množinu funkcí pro práci s ní, např. pro vkládání, vyhledávání pomocí klíče, nebo výpis celé tabulky včetně všech lokálních tabulek pro případné ladění. Obdobně se do lokální tabulky ukládají identifikátory proměnných, stejně jako jejich datové typy a hodnoty (tyto informace se však využijí až při interpretaci). Lokální tabulka rovněž nabízí funkce pro vkládání, vyhledávání, ukládání hodnot, výpis, apod. 3
5 1.3 Syntaktický analyzátor Syntaktický analyzátor kontroluje syntaktickou správnost zdrojového programu a řídí jeho překlad do námi navrženého tříadresného kódu (přeskakujeme tedy generování abstraktního syntaktického stromu). Kvůli jednoduchosti sémantické analýzy jazyka IFJ2011 se navíc stará i o ni (kontrola datových typů a již deklarovaných proměnných). Tato část programu je nejsložitější a proto je rozdělena na dvě úzce provázané části: obecný syntaktický analyzátor syntaktický analyzátor výrazů Obecný syntaktický analyzátor (dále jen obecný SA) zpracovává obdržené tokeny rekurzivním sestupem podle následující LL gramatiky: START -> FUNC ; FUNC -> function id-funkce ( PARAMS ) DEKLARACE PRIKAZY end FUNC FUNC -> e PARAMS -> id PARZBYT PARAMS -> e PARZBYT ->, id PARZBYT PARZBYT -> e DEKLARACE -> e DEKLARACE -> local id LOCALZBYT LOCALZBYT -> ; DEKLARACE LOCALZBYT -> = literal ; DEKLARACE FORMAT -> retezec FORMAT -> cislo FPARAM -> literal-id FPARAMZBYT FPARAM -> e FPARAMZBYT ->, literal-id FPARAMZBYT FPARAMZBYT -> e PRIKAZY -> e PRIKAZY -> id = IDRZBYT PRIKAZY -> write ( VV ) ; PRIKAZY PRIKAZY -> if VYRAZ then PRIKAZY else PRIKAZY end ; PRIKAZY PRIKAZY -> while VYRAZ do PRIKAZY end ; PRIKAZY PRIKAZY -> return VYRAZ ; PRIKAZY IDRZBYT -> read ( FORMAT ) ; PRIKAZY IDRZBYT -> VYRAZ ; PRIKAZY IDRZBYT -> id-funkce ( FPARAM ) ; PRIKAZY VV -> VYRAZ VZ VV -> e VZ ->, VYRAZ VZ VZ -> e 4
6 Syntaktický analyzátor výrazů (dále jen SA výrazů) pracuje zdola-nahoru, a to metodou precedenční syntaktické analýzy. Využívá k tomu níže uvedenou gramatiku a precedenční tabulku. SA výrazů je volán obecným SA vždy, když je na vstupu očekáván výraz. SA výrazů tento výraz analyzuje ze syntaktického i sémantického hlediska a vytvoří příslušné instrukce tříadresného kódu. Obecnému SA vrátí výsledek výrazu (přesněji vrátí odkaz na místo vytvořené v tabulce symbolů, kam se při samotné interpretaci uloží výsledek daného výrazu). I -> CISLO I -> RETEZEC I -> TRUE I -> FALSE I -> NIL I -> ID E -> I E -> (E) E -> E ^ E E -> E * E E -> E / E E -> E + E E -> E E E -> E.. E E -> E < E E -> E > E E -> E <= E E -> E >= E E -> E == E E -> E ~= E Obrázek 3 - precedenční tabulka 1.4 Interpret Interpret zajišťuje provádění vygenerovaného tříadresného kódu. Jako součást projektu přímo navazuje na syntaktický analyzátor (optimalizátor i generátor vnitřního kódu jsme se rozhodli vynechat, abychom zachovali jednoduchost). V případě úspěchu syntaktické analýzy je interpretu předán lineární seznam instrukcí námi navrženého tříadresného kódu, jenž může obsahovat následující instrukce: INSTRUKCE_MOCNINA INSTRUKCE_NASOBENI INSTRUKCE_DELENI INSTRUKCE_SOUCET INSTRUKCE_ROZDIL INSTRUKCE_KONKATENACE INSTRUKCE_MENSI INSTRUKCE_VETSI INSTRUKCE_MENSI_ROVNO INSTRUKCE_VETSI_ROVNO INSTRUKCE_NEROVNOST INSTRUKCE_ROVNOST INSTRUKCE_TYPE INSTRUKCE_SUBSTR INSTRUKCE_FIND INSTRUKCE_SORT INSTRUKCE_PRIRAZENI INSTRUKCE_CALL INSTRUKCE_RETURN INSTRUKCE_PUSH INSTRUKCE_POP INSTRUKCE_LABEL INSTRUKCE_GOTO INSTRUKCE_GOTOIF INSTRUKCE_READ_POCET INSTRUKCE_KONEC INSTRUKCE_WRITE INSTRUKCE_READ_L INSTRUKCE_READ_A INSTRUKCE_READ_N 5
7 Každá instrukce dále obsahuje tři obecné ukazatele dvě adresy operandů a jednu adresu výsledku. Jedná se většinou o adresy proměnných v lokální tabulce, ale může jít i o jiný typ ukazatele (např. ukazatel do globální tabulky v případě volání funkce). Důležité je, že každá instrukce očekává přesně daný typ ukazatelů, který se nesmí porušit. Předávání parametrů při volání funkcí je řešeno pomocí zásobníku, na který se ukládají kopie uzlů lokální tabulky (tedy hodnoty proměnných). Stejným zásobníkem je řešeno i předávání návratových hodnot (před každým příkazem return ve funkci se tedy provádí instrukce INSTRUKCE_PUSH nad návratovou hodnotou a po každém volání se provádí INSTRUKCE_POP). Volání funkcí navíc vyžaduje zajištění návratu na správnou adresu po příkazu return, k čemuž slouží zásobník návratových adres, do nějž lze zároveň ukládat ukazatele na kopie lokálních tabulek vznikajících při případném rekurzívním volání. 1.5 Řetězcové algoritmy Řazení pole znaků je řešeno algoritmem Shell sort, pracuje tedy in situ a není nutné alokovat další prostor pro samotné řazení, jenom je nutné mít právo přepisování předané paměti. Nestabilita této metody nám nevadí, jelikož se neřadí složitější struktury, ale pouze znaky. K vyhledávání podřetězci byl využit Boyer-Mooreův algoritmus. Inspirací nám byla verze ze studijní opory k předmětu IAL, nicméně jsme ji napsali podle vlastního pochopení této metody. 2. Práce v týmu 2.1 Organizace Náš tým pořádal nepravidelná setkání průměrně jednou každý týden. To nám pomohlo pravidelně diskutovat aktuální problémy, programovat ve více lidech apod. Jako nástroj komunikace mimo školu jsme používali IM program. Zdrojové kódy jsme sdíleli přes program Dropbox, který se ale příliš neosvědčil, zejména kvůli zmatku v souborech. Příště bychom použili některý z programů specializovaných na správu verzí. Se značnou částí návrhu nám pomohla konzultace s odborným asistentem. Rozdělování práce neprobíhalo striktně, všichni členové týmu si pomáhali navzájem. Při práci na projektu jsme navíc zjistili, jak důležité je testování, kterým jsme strávili podstatnou a velmi poučnou část projektu. Rovněž návrh a dodržování rozhraní v rámci programu byli velmi důležité. Velmi nám pomohlo soustředit se na dokončení určité části překladače do termínu pokusného odevzdání, protože bychom se nejspíš potýkali s mnohem většími časovými problémy, kdybychom začali na programu pracovat později. Dále jsme se snažili psát čitelný a dostatečně komentovaný kód dodržující zavedená pravidla tvoření identifikátorů napomáhající k větší přehlednosti a vůbec dodržovat obecné zásady efektivního programování. Do jisté míry jsme se snažili zachovávat i zapouzdřenost jednotlivých částí programu, i když se nám to ne vždy povedlo. 2.2 Problémy Projekt byl pro nás problematický především v tom, že jsme až do pozdního stadia semestru neznali princip všech částí překladače, přičemž v té době jsme ho již měli velkou část implementovanou. Z toho plynuly problémy se změnou rozhraní nebo i celé funkčnosti již napsaných částí, přepisování nebo i zahazování již napsaných částí kódu. To vše umocňoval časový stres těsně před odevzdáním, kdy jsme projektu museli všichni věnovat dvě až šest hodin denně, abychom vše stihli. Stejně tak jsme se potýkali s nevhodným návrhem některých částí překladače, což byla většinou čistě naše chyba. V závěru jsme museli řešit například nevhodně navržené předávání parametrů funkcím, přičemž jsme nakonec dospěli ke klasickému předávání pomocí zásobníku. Jeho implementace se nicméně nezdařila příliš 6
8 efektivně, protože nám návrh lokální tabulky neumožňuje vkládat na zásobník pouze hodnoty, což by postačovalo, ale nutí nás ukládat celé uzly lokální tabulky. Příště bychom tedy datovou strukturu, představující proměnnou, zcela oprostili od způsobu implementace lokální tabulky. 2.3 Rozdělení práce Úkoly v týmu byly zhruba rozděleny takto: Martin Latta - obecný syntaktický analyzátor, celková syntaktická analýza Michal Cupák - syntaktický analyzátor pro výrazy, organizace a vedení týmu Michal Hradecký interpret, pom. práce na ostatních částech Miloslav Číž - lexikální analyzátor, tabulka symbolů, dokumentace Tereza Černá řetězcové algoritmy, tabulka symbolů, pom. práce na ostatních částech 3. Metriky počet všech zdrojových souborů: 20 celkový počet řádků: 5555 velikost spustitelného programu (bez debugovacích informací, Linux 64bit): bytů velikost spustitelného programu (bez debugovacích informací, Windows 64bit): bytů 4. Použité zdroje přednášky a studijní opora předmětu IFJ přednášky a studijní opora předmětu IAL konzultace s odborným asistentem 7
Implementace 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íce1 Úvod do kompilátorů
1 Úvod do kompilátorů 1.1 Úvodem několik slov Tyto texty obsahují úvod do návrhu programovacích jazyků a problematiky překladu programů. Téma pokrývá oblasti zahrnující lexikální analýzu (scanning), regulární
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í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íceImplementace seznamů do prostředí DELPHI pomocí lineárního seznamu
Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Ukazatel a dynamické datové struktury v prostředí DELPHI Důležitým termínem a konstrukčním programovým prvkem je typ UKAZATEL. Je to vlastně
VíceGENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK)
GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK) 2011 Jan Janoušek MI-GEN Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Úvod
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í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ícePROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programová realizace DKA typedef enum {q0, q1,... qn,
VíceRoman Lukáš email: lukas@fit.vutbr.cz
ZADÁNÍ PROJEKTU Z PŘEDMĚTŮ IFJ A IAL Roman Lukáš email: lukas@fit.vutbr.cz 22. září 2008 1 Obecné informace Název projektu: Implementace interpretu imperativního jazyka IFJ08. Informace: diskusní skupina
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í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íceDistanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.
Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Dynamické datové struktury 1.1 Příklad:
VíceProblém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce
Interpreter Interpreter Motivace Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce Příklad: zda daný textový řetězec odpovídá nějakému vzoru (match)
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íce2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.
Vážení zákazníci, dovolujeme si Vás upozornit, že na tuto ukázku knihy se vztahují autorská práva, tzv copyright To znamená, že ukázka má sloužit výhradnì pro osobní potøebu potenciálního kupujícího (aby
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í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íceAlgoritmus Minimax. Tomáš Kühr. Projektový seminář 1
Projektový seminář 1 Základní pojmy Tah = přemístění figury hráče na tahu odpovídající pravidlům dané hry. Při tahu může být manipulováno i s figurami soupeře, pokud to odpovídá pravidlům hry (např. odstranění
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í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ícePROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti LEXIKÁLNÍ ANALÝZA Kód ve vstupním jazyku Lexikální analyzátor
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ícefor (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }
Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný
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íceSemestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016
Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016 Obsah 1 Zadání 1 2 Analýza úlohy 2 2.1 Uložení dat ze vstupního souboru................ 2 2.2 Graf
Více{krivka, 11. října 2009
ZADÁNÍ PROJEKTU Z PŘEDMĚTŮ IFJ A IAL Zbyněk Křivka, Jakub Křoustek email: {krivka, ikroustek}@fit.vutbr.cz 11. října 2009 1 Obecné informace Název projektu: Implementace interpretu imperativního jazyka
VíceImplementace interpretu imperativního jazyka IFJ12
Dokumetace k projektu do předmětů IFJ a IAL Implementace interpretu imperativního jazyka IFJ12 Tým 78, varianta b/3/ii 9. prosince 2012 Seznam autorů: Blanárik, Martin xblana00@stud.fit.vutbr.cz 20% Čulen,
VíceLexikální analýza. Rozhraní lexikálního analyzátoru. Miroslav Beneš Dušan Kolář. M. Beneš, D. Kolář: Lexikální analýza 1. Lexikální analýza 2
Lexikální analýza Miroslav Beneš Dušan Kolář Rozhraní lexikálního analyzátoru Lexikální analýza 2 M. Beneš, D. Kolář: Lexikální analýza 1 Úkoly Čtení zdrojového textu Sestavování symbolů Odstranění mezer
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ápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
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íceLexikální analýza. Miroslav Beneš Dušan Kolář
Lexikální analýza Miroslav Beneš Dušan Kolář Rozhraní lexikálního analyzátoru Lexikální analýza 2 Úkoly Čtení zdrojového textu Sestavování symbolů Odstranění mezer a poznámek Normalizace symbolů (velká/malá
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íce1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
VíceSémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.
Sémantická analýza Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 19. listopadu 2009 Definice (Sémantická analýza) Vstup: konstrukce symbolů vytvořená
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ícefor (i = 0, j = 5; i < 10; i++) { // tělo cyklu }
5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu
VíceTeoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
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í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íce20. Projekt Domácí mediotéka
Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý
VíceAutomaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů
BI-AAG (2011/2012) J. Holub: 1. Základní pojmy p. 2/29 Hodnocení předmětu BI-AAG (2011/2012) J. Holub: 1. Základní pojmy p. 4/29 Automaty a gramatiky(bi-aag) 1. Základní pojmy Jan Holub Katedra teoretické
VícePREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
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íceIB109 Návrh a implementace paralelních systémů. Kolektivní komunikační primitava. RNDr. Jiří Barnat, Ph.D.
IB109 Návrh a implementace paralelních systémů Kolektivní komunikační primitava RNDr. Jiří Barnat, Ph.D. Kvantitativní parametry komunikace B109 Návrh a implementace paralelních systémů: Kolektivní komunikační
Víceemail: {ikroustek, krivka}@fit.vutbr.cz
ZADÁNÍ PROJEKTU Z PŘEDMĚTŮ IFJ A IAL Jakub Křoustek, Zbyněk Křivka email: {ikroustek, krivka}@fit.vutbr.cz 21. září 2010 1 Obecné informace Název projektu: Implementace interpretu imperativního jazyka
VíceDalší aspekty architektur CISC a RISC Aktuálnost obsahu registru
Cíl přednášky: Vysvětlit principy práce s registry v architekturách RISC a CISC, upozornit na rozdíly. Vysvětlit možnosti využívání sad registrů. Zabývat se principy využívanými v procesorech Intel. Zabývat
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íceDynamické programování
Dynamické programování 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)
VíceProgramování. Psaní čistého kódu. Martin Urza
Programování Psaní čistého kódu Martin Urza Motivace Pro kompilátor je jedno, jestli je kód oddělen mezerami, odřádkováními či tabulátory. Přeložitelný kód může vypadat třeba i jako ten úchvatně přehledný
VíceSpojová implementace lineárních datových struktur
Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB
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í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íceZápadočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP
Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP Petr Sládek slady@slady.cz 27. ledna 2005 Zadání Cílem této semestrální práce je kontrola zdrojového kódu překladače jazyka
VíceImplementace numerických metod v jazyce C a Python
Fakulta elektrotechnická Katedra matematiky Dokumentace k semestrální práci Implementace numerických metod v jazyce C a Python 2013/14 Michal Horáček a Petr Zemek Vyučující: Mgr. Zbyněk Vastl Předmět:
VíceDistribuovaná synchronizace. Paralelní a distribuované systémy. 11. Přednáška Vzájemné vyloučení. Centralizovaný algoritmus - fronta procesů
Distribuovaná synchronizace Využití kritické sekce při vzájemném vyloučení v distribuovaném systému Paralelní a distribuované systémy 11. Přednáška Vzájemné vyloučení Logicky distribuovaný systém s vlákny
VícePROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNAKICKÁ ANALÝZA DOKONČENÍ, IMPLEMENACE. VLASNOSI LL GRAMAIK A JAZYKŮ. 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Gramatika
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íceÚvod do programování
Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal
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íce1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
VícePoslední nenulová číslice faktoriálu
Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip
VíceSemestrální práce implementuje univerzální tokenizer založený na stavovém automatu. Jsou implementovány následující automaty:
Překladač a obfuskátor ECMAScriptu Jan Pobříslo - semestrální práce PJP Zadání Zadáním semestrální práce je překladač pro ECMAScript (v. 262) z jazyka rozšířeného o třídní dědění (ECMAScript používá dědění
VíceIB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)
IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná
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íceAbstraktní datové typy FRONTA
Abstraktní datové typy FRONTA Fronta je lineární datová struktura tzn., že ke každému prvku s výjimkou posledního náleží jeden následník a ke každému prvku s výjimkou prvního náleží jeden předchůdce. Do
VíceMartin Milata, <256615@mail.muni.cz> 27.11.2007. Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od
IB000 Lámání čokolády Martin Milata, 27.11.2007 1 Čokoláda s alespoň jedním sudým rozměrem Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už
VíceZákladní stavební prvky algoritmu
Základní stavební prvky algoritmu Podmínka. Cyklus for, while, do-while. Funkce, metody. Přetěžování. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká
VíceSemestrální práce z předmětu Teorie programovacích jazyků
Vysoké učení technické v Brně Fakulta informačních technologií Semestrální práce z předmětu Teorie programovacích jazyků Roman Lukáš 2003-2004 1 Jazykové procesory (Language Processors) 1.1 Překladače
VíceSeminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr
Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)
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ícePA152. Implementace databázových systémů
PA152 Implementace databázových systémů RAID level 1 zrcadlení disku výpočet MTTF 2 stejné disky, MTTF 3 roky výměna vadného 3,5 dne výpadek oba disky během 3,5 dne p(výpadku disku za rok) = 1/6 p(výp.
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í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ícezswi/pc-testování.d 10. května 2003 1
zswi/pc-testování.d 10. května 2003 1 White-box testování ------------------- * white-box testování = využíváme znalost implementace - obvykle se používá pro testování relativně malých částí programu,
VíceTabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář
Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění
VíceKolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín
Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit
VíceSemestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz
Semestrální práce z předmětu KIV/UPA Jan Bařtipán / A03043 bartipan@studentes.zcu.cz Zadání Program přečte ze vstupu dvě čísla v hexadecimálním tvaru a vypíše jejich součet (opět v hexadecimální tvaru).
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ícePřednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.
Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu
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íceGENEROVÁNI KÓDU jazyk Mila
Czech Technical University in Prague Faculty of Information Technology Department of Theoretical Computer Science GENEROVÁNI KÓDU jazyk Mila Jan Janoušek Evropský sociální fond. Praha & EU: Investujeme
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í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ícePROGRAMOVACÍ JAZYKY A PŘEKLADAČE FORMALISMY PRO SYNTAXÍ ŘÍZENÝ PŘEKLAD: PŘEKLADOVÉ A ATRIBUTOVÉ GRAMATIKY.
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE FORMALISMY PRO SYNTAXÍ ŘÍZENÝ PŘEKLAD: PŘEKLADOVÉ A ATRIBUTOVÉ GRAMATIKY. 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Formální
Více1. Uživatelská úprava příkazů I.
1. Uživatelská úprava příkazů I. Studijní cíl Tento blok kurzu vysvětluje, jak zadávat příkazy operačního systému během práce v AutoCADu a jak vytvářet zkratky pro často používané příkazy a dočasně předefinovat
Více7. Popis konečného automatu
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Praktika návrhu číslicových obvodů Dr.-Ing. Martin Novotný Katedra číslicového návrhu Fakulta informačních technologií ČVUT v Praze Miloš
VíceOSTRAVSKÁ UNIVERZITA V OSTRAVĚ
OSTRAVSKÁ UNIVERZITA V OSTRAVĚ REGULÁRNÍ A BEZKONTEXTOVÉ JAZYKY II HASHIM HABIBALLA OSTRAVA 2005 Recenzenti: RNDr. PaedDr. Eva Volná, PhD. Mgr. Rostislav Fojtík Název: Regulární a bezkontextové jazyky
VíceTento počítač. 1 Seznámení s programem. 2 Spuštění programu. Adresářové operace Popis programu Tento počítač, podstata adresářových operací.
Tento počítač 1 Seznámení s programem Tento počítač je program integrovaný ve Windows, který slouží ke správě souborů a složek na discích, tedy k provádění adresářových operací. Najdeme ho v nabídce START
VícePROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE
PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Základní informace Přednášky: doc. Ing. Jan Janoušek, Ph.D.
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íceHelios RED a Internetový obchod
(pracovní verze!) Helios RED a Internetový obchod Obsah dokumetace: 1. Úvod 2. Evidované údaje na skladové kartě 3. Přenos skladových karet z Helios RED do e-shopu 4. Přenos objednávek z e-shopu do Helios
Vícepřirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:
Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.
VíceNPRG030 Programování I, 2016/17 1 / :58:13
NPRG030 Programování I, 2016/17 1 / 31 10. 10. 2016 10:58:13 Podmínka = něco, co JE, nebo NENÍ splněno typ Boolean hodnoty: TRUE pravda FALSE lež domluva (optimistická): FALSE < TRUE NPRG030 Programování
VíceVYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INFORMAČNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS PARALELNÍ SYNTAKTICKÁ
VíceZáklady programování (IZP)
Základy programování (IZP) Čtvrté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 4.
VíceProgramování. Debugging a testování. Martin Urza
Programování Debugging a testování Martin Urza Co je debugging? V počítačích nulté generace byly důvodem některých chyb zkraty, které způsoboval mimo jiné hmyz, jenž do těchto strojů zalézal. Odstraňování
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ícePRG036 Technologie XML
PRG036 Technologie XML Přednáší: Irena Mlýnková (mlynkova@ksi.mff.cuni.cz) Martin Nečaský (necasky@ksi.mff.cuni.cz) LS 2010 Stránka přednášky: http://www.ksi.mff.cuni.cz/~mlynkova/prg036/ 1 Osnova předmětu
Více