1 - Uvod Flashcards
Čemu služi specifikacija programskog jezika?
Da se zna:
- kakav je i šta radi određeni jezik
- kako ga implementirati
- za sporazumevanje između projektanta jezika, implementatora jezika i korisnika (programera)…
Šta obuhvata specifikacija jezika?
Sintaksu i semantiku
Šta je sintaksa?
Gramatika jezika
Šta je semantika?
Značenje jezika
Šta znači CFG specifikacija sintakse?
Context Free Grammar (Bezkontekstna gramatika)
Šta su bezkontekstne gramatike?
Sintakse gde pravila smene ne zavise od okružujućeg konteksta neterminalnog simbola.
Šta čini bezkontekstne gramatike?
- konačan skup terminalnih simbola
- konačan skup neterminalnih simbola
- startni (početni) simbol
- konačan skup smena
U kojoj notaciji se često pišu bezkontekstne gramatike?
U BNF notaciji (Backus-Naur Form)
Za šta se koristi BNF notacija?
Za definisanje sintakse programskih jezika
Kako se piše smena u BNF notaciji?
N::=α
Kako skraćeno možemo da napišemo
N::=α
N::=ß
…
u BNF notaciji?
N::=α | ß | …
U BNF notaciji za smenu N::=α, šta je N a šta je α?
N je neterminal
α je sekvenca terminala i neterminala
U BNF notaciji, šta je N::=α | ß | …
Skraćenica za nekoliko pravila sa levom stranom N
Koja je alternativna notacija BNF notaciji N::=α ?
<N> → α
</N>
Šta definiše CFG?
Definiše jezik te gramatike (skup nizova terminala).
U primeru ispod, koje statičko semantičko pravilo nije ispoštovano?
const m~2;
m + x
x je nedefinisano
→ pravilo opsega važenja nije ispoštovano
U primeru ispod, koje statičko semantičko pravilo nije ispoštovano?
const m~2;
var n: Boolean;
begin
n := m < 4;
n := n + 1
pogrešan tip
→ pravilo tipa nije ispoštovano
Kada se pravila statičke semantike mogu proveriti?
Od strane kompajlera, bez izvršavanja programa
Kakve vrste semantike postoje?
Statička i izvršna (run-time) semantika
Šta se radi sa izrazima u izvršnoj semantici?
Izrazi se izračunavaju i daju vrednost (i mogu ali ne moraju imati bočne efekte).
Šta se radi sa iskazima u izvršnoj semantici?
Iskazi se izvršavaju i proizvode bočne efekte.
Šta se radi sa deklaracijama u izvršnoj semantici?
Deklaracije se elaboriraju da proizvedu vezivanja.
Šta mogu biti bočni efekti u izvršnoj semantici?
- promena vrednosti promenljive
- obavljanje ulaza/izlaza
Kako se izvršava iskaz V := E (semantički neformalno)?
- izraz E se izračuna i daje vrednost v
- v se dodeljuje promenljivoj V
Kako se izvršava iskaz sekvence C1; C2 (semantički neformalno)?
- prvo se izvrši iskaz C1
- potom se izvrši iskaz C2
Objasniti primer semantike deklaracije?
var I: T
Deklaracija var I: T se elaborira vezujući I za novoalociranu promenljivu, čija inicijalna vrednost nije definisana.
Promenljiva će biti dealocirana na izlasku iz bloka koji sadrži pomenutu deklaraciju.
Navesti funkcionalnu strukturu prevodioca.
niz znakova
☼ SKENIRANJE (Leksička analiza)
niz tokena
☼ PARSIRANJE (Sintaksna analiza)
sintaksno stablo
☼ SEMANTIČKA ANALIZA
međukod
☼ OPTIMIZACIJA
☼ GENERISANJE KODA
mašinski kod
Šta je skeniranje?
Leksička analiza
Šta je parsiranje?
Sintaksna analiza
Kako funkcionišu faze u jednoprolaznim prevodiocima?
Isprepleteno:
→ skeniranje tokena
- parsiranje tokena
- provera tokena
- generisanje koda za token
←ne) Kraj ulaza? (da↓
Šta su zapravo faze u višeprolaznim prevodiocima?
Faze su zasebni ˝programi˝ koji se izvršavaju sekvencijalno.
Svaka faza čita iz datoteke i zapisuje u novu datoteku.
Zašto je nekad bolje imati više prolaza kod prevodilaca?
- ako je memorija kritična (danas irelevantno)
- ako je jezik kompleksan
- ako je važna prenosivost kompajlera
multi-pass compilers are more memory-efficient per pass
Koliko-prolazni kompajleri su danas najčešći?
Dvoprolazni prevodioci
Šta predstavlja front-end kod dvoprolaznih prevodilaca?
Skeniranje
Parsiranje
Semantička analiza
Šta predstavlja back-end kod dvoprolaznih prevodilaca?
Generisanje koda
Od čega zavisi prednji kraj dvoprolaznog prevodioca?
Od programskog jezika
Od čega zavisi zadnji kraj dvoprolaznog prevodioca?
Od mašine
Koje su prednosti dvoprolaznog prevodioca?
- bolja prenosivost
- razne kombinacije između prednjih i zadnjih krajeva su moguće
- optimizacije se lakše vrše na međukodu nego na izvornom kodu
Koje su mane dvoprolaznog prevodioca?
- sporije prevođenje
- traži više memorije
two-pass compilers might require more memory for their intermediate representations and data storage over the course of their execution
Koja je razlika između prevodioca i interpretatora?
Prevodilac prevodi u mašinski kod
Interpretator ¨neposredno¨ izvršava izvorni kod
Kod klasičnog interpretatora, kada nastupa interpretiranje?
Neposredno izvršavanje izvornog koda:
Izvorni kod
☼ SKENIRANJE
☼ PARSIRANJE
◙ INTERPRETIRANJE
Kod druge varijante interpretatora, kada nastupa interpretiranje?
Interpretacija međukoda:
Izvorni kod
…prevođenje…
međukod (CIL) virtuelne mašine
◙ VM INTERPRETIRA KOD (simulira fizičku mašinu)
Šta znači CIL?
Common Intermediate Language (međukod)