02 1 Osnovne Faze

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

Programski prevodioci

02 Osnovne faze
23-24
Dunja Vrbaški
Fakultet tehničkih nauka, Novi Sad
Polazni jezik
Leksika
(source code)

Sintaksa Semantika

Generisanje
Ciljni jezik
koda

2
Polazni jezik
Leksika
(source code)

Sintaksa Semantika Upravljanje greškama

Generisanje
Ciljni jezik
koda

3
Polazni jezik
Leksika
(source code) Upravljanje greškama

Transformacije koda

Analiza koda
Sintaksa Semantika

Optimizacije

Upravljanje resursima
Generisanje
Ciljni jezik
koda
...

4
Polazni jezik Leksika Polazni jezik Leksika

Sintaksa Semantika Sintaksa Semantika

Generisanje Generisanje
Ciljni jezik IR
koda IR

Generisanje
Ciljni jezik
koda

IR – Intermediate representation (međureprezentacija)

5
Polazni jezik Leksika

Front end
Sintaksa Semantika SL 1 TL 1

SL 2 IR TL 2
Generisanje
IR
IR Middle end
SL 3 TL 3

Generisanje
koda
Ciljni jezik Back end

6
VEŽBE
Razvoj prevodioca

7
Leksička analiza - Skener

string tokeni
leksička pravila greške

8
if (x == 5)
{ if ( x == 5 ) { y = 3 ; }
y = 3; //komentar
}
lekseme

<KEYW, IF, 1> <LPAREN,, 1> <IDENT, x, 1>


<ROP, EQ, 1> <NUM, 5, 1> <RPAREN,, 1>
<LBRAC,, 2> <IDENT, y, 3> <ASSIGN,, 3> <NUM, 3, 3>
<SC,, 3> <RBRAC,, 4>

tokeni

9
identifier -> letter ( letter | digit )*

ar_operator -> "+" | "-"

rel_operator -> "==" | "<"

regularni izrazi
automati
flex
C
build
test primeri

10
Sintaksna analiza - Parser

tokeni
greške
sintaksna pravila

* parse tree, AST

11
x = 5; <IDENT, x> <ASSIGN, >, <NUM, 5> - OK
y 3; <IDENT, y> , <NUM, 3> - Greška

Primer. Pretpostavljamo da je u posmatenom jeziku prva linija ispravna, a da druga nije.

12
gramatike num_exp ::= exp

flex
| num_exp _ar_operator exp

bison
exp ::= literal
| _identifier
| function_call
C | “(” num_exp “)”

build
test primeri

13
Semantička analiza

sintaksna pravila greške

14
int x = 5;
string str = “abc”;
x = str;

15
pravila semantike
flex - svi globalni identifikatori moraju biti međusobno različiti
- lokalni identifikatori raznih funkcija mogu biti identični

bison if(get_type(fun_idx) == VOID)


err("Function cannot return value");
C else if(get_type(fun_idx) != get_type($2))
err("incompatible types in return");
build return_count++;

test primeri

tabela simbola

16
Generisanje koda

sintaksna pravila ciljni kod (HAJ)

* generisanje međukoda

17
int f(int p) { f:
int a; PUSH %14
return p + a; MOV %15,%14
} SUBS %15,$4,%15
@f_body:
ADDS 8(%14),-4(%14),%0
...

18
asembler (hipotetski)
flex source hip asm
bison code("\n\t\t%s\t", ar_instructions[ADD + (get_type(idx) - 1) * AROP_NUMBER]);

C gen_sym_name(idx);
code(",$1,");

build
gen_sym_name(idx);

test primeri

emulator

hip asm ? target

19
PREDAVANJA
- podrška za vežbe (faze)
- runtime
- upravljanje memorijom
- kompajliranje, interpretiranje, JIT
- virtualne mašine, međukod
- optimizacije
- tipovi
- …

Računarske nauke (Computer Science; CS) > Programski jezici (Programming Languages; PL)

20

You might also like