FJP Flashcards

1
Q

Jaké jsou důvody pro použití víceprůchodového překladače?

A
  • Překlad probíhá ve více fázích – dříve kvůli paměti – jen jedna část překladače je v paměti.
  • Snadněji jde rozdělit práci na překladači mezi více programátorů
  • Algoritmy pro optimalizaci jsou často složité – mají proto vlastní průchod, často i více průchodů.
  • zajímají nás meziprodukty – mezipřeklady:
  1. Průchod -> 1. meziprodukt -> … -> n. průchod -> Finální produkt
    - lze optimalizovat překládaný program – kvůli dopředným skokům
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Jaká vlastnost gramatiky podmiňuje nekonečnost generovaného jazyka

A

Rekurzivnost, cyklus v gramatice. Např.: A -> aA

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Jak řeší lexikální analyzátory problém nalezení symbolu v případě, kdy je jeden symbol prefixem druhého?

A

Testuje další znaky na výskyt v jiném delším symbolu. Hledá nejdelší možný symbol.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Kdy označujeme větu jazyka jako víceznačnou

A

Věta generovaná gramatikou G je víceznačná, existují-li alespoň dva různé derivační stromy této věty. G pak rovněž nazýváme víceznačnou.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Jaké vlastnosti musí splňovat jazyk analyzovatelný rekurzivním sestupem

A

Musí splňovat vlastnosti LL gramatik, nesmí obsahovat levou rekurzi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Popište princip metody rekurzivního sestupu

A

Derivační strom je budován postupným voláváním procedur odpovídajících jednotlivým neterminálům gramatiky a jejich prováděním. Tělo procedury určují pravé strany pravidel pro daný neterminální symbol. Pravé strany musí být rozlišitelné na základě symbolů vstupního řetězce aktuálních v okamžiku uplatnění příslušné pravé strany.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Charakterizujte syntetizované atributy

A

Atributy vyhodnocované průchodem derivačního stromu zdola nahoru nazýváme syntetizované

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Popište způsob vyhodnocování dědičných atributů

A

Atributy vyhodnocované průchodem derivačního stromu shora dolů nazýváme dědičné.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Popište zásady konstrukce postfixového výrazu z infixového

A

Vytvoříme derivační strom výrazu a poté jej vypíšeme metodou postorder. Nebo lze vytvořit pomocí zachování pořadí operandů, operátory následují za operandy.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Popište význam částí dynamické adresy (adresové dvojice)

A

Adresová dvojice se skládá z Báze, která určuje hloubku zanoření aktuálního bloku ve vykonávaném programu) + offset (posun od začátku bloku/adres v daném bloku)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Formulujte podmínku, kterou musí splňovat program, aby statický řetězec výpočtového zásobníku stále splýval s dynamickým řetězcem

A

Podprogramy mohou volat pouze podprogramy, které jsou v dané úrovni deklarované, žádná rekurzivní volání.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Jaké informace o proměnných jsou uloženy v tabulce symbolů překladače jazyka pascalského typu

A
  • druh (návěští, konstanta, typ, proměnná, procedura, funkce)
  • hladina popisu (udává hladinu bloku, ve kterém byla popsána)
  • adresa
  • použití (Ano/Ne)
  • typ – údaj o standardním jednoduchém typu
  • údaj o typu definovaném uživatelem
  • údaj o strukturovaném typu
  • formální parametr
  • druhy formálních parametrů
  • způsob volání a hodnota
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Popište odlišnost zpřístupnění nelokálních proměnných Pascalu a C

A

V C nelze definovat vnořené procedury, všechny proměnné jsou buď lokální, nebo globální.
V Pascalu lze definovat libovolně vnořené procedury, v nejnižší proceduře jsou přístupné proměnné všech nadřazených procedur.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Uveďte, jaké údaje ukládá překladač v aktivačním záznamu

A

návratová adresa, statický a dynamický ukazatel, další potřebné informace k uspořádání aktivačních záznamů.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Vysvětlete, jakým mechanismem překladač zajišťuje respektování lokality identifikátorů v blokově strukturovaném jazyce.

A

Tabulka symbolů je uspořádána do podoby zásobníku (pro jazyky s blokovou strukturou). Rozsahová jednotka je blok, modul, funkce, balík,…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Může pro víceznačnou gramatiku existovat ekvivalentní gramatika jednoznačná?

A

Ano může, ale nemusí. Jednoznačnost gramatik je algoritmicky nerozhodnutelná (důvodů může být nekonečně mnoho). Existují gramatiky, jejichž nejednoznačnost nelze odstranit (inherentně nejednoznačné).

17
Q

Existuje pro libovolnou gramatiku typu 2 algoritmus pro převod na a)ekvivalentní nelevorekurzivní gramatiku, b) LL(k) gram., c)LR(k) gram., d) …pro výpočet množin LR(0) položek?

A

a) Ano – Známe algoritmus pro odstranění levé rekurze, b) Ne, c) Ano, d) Ano

18
Q

Jaké podmínky musí splňovat množiny LR(0) položek, aby gramatika byla SLR(1)

A

X -> a . - provedu, pokud následující symbol je prvkem follow(x)
X -> a . B - provedu, pokud následující symbol patří do first(B)
Pokud je tam kolize v jedné množině, tečka na konci a v jiném pravidle tečka někde jinde (uprostřed, na začátku) pak není SLR(1).

19
Q

K čemu slouží úprava gramatiky zvaná “pohlcení terminálu”? Uveďte příklad

A

K odstraněni first-follow či first-first kolize. Př.: Převeďte G(N, T, P, A) na LL(1):
A  BaC
B  e | abC
C  c | cBC
Pro odstranění použijeme pohlcení follow symbolu:

A –> [Ba]C
[Ba] –> a | abCa
B –> e | abC
C –> c | cBC

20
Q

Popište mechanismus zpracování statických metod

A

c . f() překlad volání f závisí na typu objektové proměnné c
překladač vyhledá třídu C objektu c
v C hledá metodu f, když jí nenajde, hledá jí v rodiči C…
pokud program není chybný, v nějakém předkovi jí najde
volání se přeloží do skoku na její vstupní bod.

21
Q

Popište mechanismus zpracování dynamických metod

A

Mohou být překryty ve třídě potomka.
V době překladu nelze určit zda se jedná o metodu předka či potomka.
Řešení:
Deskriptor třídy musí obsahovat vektor s metodami pro každé ze jmen nestatických metod (VMT).
Když třída P dědí z R, pak VMT pro P začíná se vstupními body všech metod platných pro R a pokračuje s novými metodami zavedenými v P.
Pokud třída PPP překryje metodu R_f, bude na místě R_f ve VMT pro PPP adresa PPP_f.
Při exekuci pp.f () musí přeložený kód provést
1. Zjistit deskriptor třídy objektu na který ukazuje pp,
2. Z něj zjistit adresu vstupního bodu metody f
3. Skok do podprogramu na adresu tohoto vstupního bodu