Prevođenje programskih jezika http://www.zemris.fer.hr/predmeti/ppj/ Auditorne vježbe Priprema za međuispit 2. dio Fakultet elektrotehnike i računarstva Sveučilište u Zagrebu 1 od 34 Copyright © 2011 Srbljić, Žužak, Skrobo, Popović,

Download Report

Transcript Prevođenje programskih jezika http://www.zemris.fer.hr/predmeti/ppj/ Auditorne vježbe Priprema za međuispit 2. dio Fakultet elektrotehnike i računarstva Sveučilište u Zagrebu 1 od 34 Copyright © 2011 Srbljić, Žužak, Skrobo, Popović,

Prevođenje programskih jezika
http://www.zemris.fer.hr/predmeti/ppj/
Auditorne vježbe
Priprema za međuispit
2. dio
Fakultet elektrotehnike i računarstva
Sveučilište u Zagrebu
1 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 9
• Za zadanu gramatiku izgradite parser zasnovan na tehnici
parsiranja Pomakni-Pronađi.
S → p A m C
S → b A
A → d S a
A → e
C → d A
Izgradnja parsera zasnovanom na tehnici Pomakni-Pronađi:
 = {a, b, d, e, m, p, }
 = {S, A, C, a, b, d, e, m, p, }
IspodZnaka(A, x) → Pomakni()
ReduciranZnakom(A, x) → Pronađi()
2 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 9
Relacija IspodZnaka
A
xΣ
IspodZnaka (A, x)
1. IzravnoIspredZnaka(A, B)
x  ZAPOČINJE( B )
2. A je oznaka dna stoga 
x  ZAPOČINJE( S )
x  ZAPOČINJE( A )
ZapočinjeZnakom(A, x)
3 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 9
Relacija IspodZnaka
S → p A m C
S → b A
A → d S a
A → e
C → d A
ZAPOČINJE( S ) = { p, b }
ZAPOČINJE( a ) = { a }
ZAPOČINJE( A ) = { d, e }
ZAPOČINJE( b ) = { b }
ZAPOČINJE( C ) = { d }
ZAPOČINJE( m ) = { m }
IzravnoIspredZnaka( p, A )
IzravnoIspredZnaka( A, m )
IzravnoIspredZnaka( m, C )
IspodZnaka( p, d )
ZAPOČINJE( d ) = { d }
ZAPOČINJE( e ) = { e }
ZAPOČINJE( p ) = { p }
IspodZnaka( A, m )
IspodZnaka( m, d )
IspodZnaka( p, e )
4 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 9
Relacija IspodZnaka
S → p A m C
S → b A
A → d S a
A → e
C → d A
IspodZnaka( p, d )
IspodZnaka( A, m )
IspodZnaka( m, d )
IspodZnaka( p, e )
IspodZnaka( b, d )
IspodZnaka( b, e )
IspodZnaka( d, p )
IspodZnaka( d, b )
IspodZnaka( d, d )
IspodZnaka( d, e )
IspodZnaka( , p )
IspodZnaka( , b )
5 od 34
IspodZnaka( S, a )
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 9
Relacija ReduciranZnakom
A
xΣ
ReduciranZnakom (A, x)
1. L → α A
x  SLIJEDI( L )
2. A je početni znak gramatike S
x je oznaka kraja niza 
6 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 9
Relacija ReduciranZnakom
S → p A m C
S → b A
A → d S a
A → e
C → d A
SLIJEDI( S ) = { a, }
SLIJEDI( A ) = {{ a,
a, m,
m, }}
SLIJEDI( C ) = { a, }
ReduciranZnakom( S,  )
ReduciranZnakom( C, a )
ReduciranZnakom( A, a )
ReduciranZnakom( C,  )
ReduciranZnakom( A,  )
ReduciranZnakom( a, a )
ReduciranZnakom( e, a )
ReduciranZnakom( a, m )
ReduciranZnakom( e, m )
ReduciranZnakom( a,  )
ReduciranZnakom( e,  )
7 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 9
Tablica Pomakni-Pronađi:
IspodZnaka( p, d )
a
IspodZnaka( p, e )
S
IspodZnaka( A, m )
A
IspodZnaka( m, d )
d
p
m
P()
P()
a
b
IspodZnaka( b, e )
e
IspodZnaka( d, p )
d
IspodZnaka( S, a )
e
C
IspodZnaka( b, d )
IspodZnaka( d, b )
b
P()
P()
P()
P()
P()
P()
m
P()
p

P()
P()
P()
P()
IspodZnaka( d, d )
IspodZnaka( d, e )
8 od 34
IspodZnaka( , p )
IspodZnaka( , b )
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika

Zadatak br. 9
Tablica Pomakni-Pronađi:
ReduciranZnakom( C, a )
ReduciranZnakom( C,  )
ReduciranZnakom( A, a )
ReduciranZnakom( A,  )
a
S
P()
A
R()
C
R()
a
R()
ReduciranZnakom( a, a )
b
ReduciranZnakom( a, m )
e
ReduciranZnakom( a,  )
d
b
e
p
ReduciranZnakom( e, m )

m
p
R()
P()
R()
P()
P()
R()
R()
R()
P()
R()
P()
R()
P()
P()
P()
P()
P()
P()
P()
ReduciranZnakom( e,  )
ReduciranZnakom( S,  )
9 od 34

R()
m
ReduciranZnakom( e, a )
d
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 9
a
S
P()
A
R()
C
R()
a
R()
b
d
m
p
P()
P()
R()
P()
P()
R()
R()
R()
R()
P()
R()
P()
P()
P()
P()
p
P()
P()
P()
P() {
Pomakni;
}
S S→→p bA Am C
10 od 34

R()
m

d
R()
b
e
e
R() { //pronađi
ako (VrhStoga = "p<A>m<C>")
Reduciraj1();
inače
ako (VrhStoga = "b <A>")
Reduciraj2();
inače
ako (VrhStoga = "d<S>a")
Reduciraj3();
inače
ako ( VrhStoga = "e" )
Reduciraj4();
inače
ako (VrhStoga = "d <A>")
Reduciraj5();
inače
ako ((VrhStoga = "<S>")
&& (Ulaz = "") )
Prihvati();
inače
Odbaci();
}
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 10
•
Prikažite korake tijekom parsiranja niza bbbcb primjenom
zadanog LR(1) parsera.
Stanje
Akcija
b
Novo Stanje

c
<A>
<B>
0
P1
1
P2
2
P5
S6
3
P4
S7
S3
R3
4
5
R3
6
P8
Prihvati
7
8
R2
R1 = Reduciraj (
<S> → b <A> <B> )
R2 = Reduciraj (
<A> → b <B> c )
R3 = Reduciraj ( <B>
11 od 34
<S>
→ b)
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 10
Parser
b b b c b 
Ulazni spremnik
Stanje
0
3
5
8
6
4
<S>
1
7
2

<A>
<B>
c
0
b
Stog
2
6
3

0
1
b
<B>
<A>

0
Stog
2
1
0

Stog
b

Stog
1
0
Stog
b

0
0

Stog
12 od 34
Akcija
b
c
Novo Stanje

<S>
<A>
<B>
0
P1
1
P2
2
P5
S6
3
P4
S7
S3
R3
4
5
R3
6
P8
Pri
7
8
R2
R1 = Reduciraj ( <S>
R2 = Reduciraj (
→ b <A> <B> )
<A> → b <B> c )
R3 = Reduciraj (
<B> → b )
Copyright © 2011 Srbljić, Žužak, Stog
Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 11
• Za zadanu gramatiku izgradite SLR(1) parser.
(1) S → a A c
(2) A → x S
(3) A → 
(4) S’ → S
Izgradnja SLR(1) parsera:
a) Gramatika G proširi se novim početnim stanjem S’ i
produkcijom S’ → S
b) Izgradnja -NKA na temelju gramatike
c) Izgradnja DKA na temelju -NKA
d) Izgradnja tablica Akcija i NovoStanje na temelju DKA
13 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 11
LR stavka
• produkcija gramatike koja ima oznaku točke na
proizvoljnom mjestu svoje desne strane
• A   - LR stavka jest A  ; potpuna LR stavka
Izgradnja -NKA :
G = (V,T,P,S) -NKA M = (Q, , , q0, F, )
Q = LR stavke  q0
Σ =TV
F=Q
a) (q0, ) = {S a }
b) (AaXb, X) = {AaX  b}
c) (AaBb, ) = {B g}
14 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 11
(1) S → a A c
q0

(3) A → 
(2) A → x S
S
S’ → S
(4) S’ → S
S’ → S 

S→aAc
a
S→aAc

A
A→

S→aAc

c
S→aAc
A→xS
x
A → x S
15 od 34
S
A → xS 
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 11
DKA:
0 1 S
S’ →  S
S → a A c
1
a
a
S → a A c
A → x S
A→
S’ → S 
2 1x
A→xS
S → a A c
3
S
A→xS
A
S → a A c
16 od 34
c
1
5
S→aAc
6
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
4
Zadatak br. 11
Izgradnja tablica Akcija i NovoStanje:
• Tablica Akcija
(1) S → a A c
(2) A → x S
(3) A → 
a) LR stavka Aaab u stanju s (s, a) = t
(4) S’Akcija[s,
→ S
a]=Pomakni(t)
b) Potpuna LR stavka Aa u stanju s
a je u skupu SLIJEDI(A)
Akcija[s, a]=Reduciraj(Aa)
c) LR stavka S'S u stanju s
Akcija[s, ]=Prihvati()
• Tablica NovoStanje
a) (s, A) = t
NovoStanje [s, A]= Stavi(t)
17 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 11
Slijedi(S) = { c,  }
Slijedi(A) = { c }
S’ →  S
S → a A c
Stanje
a
0
0 1
c
3
1
a

P2
<S>
Pri.
R3
P3
S5
P2
S4
4
R2
5
P6
6
R1
R1
a
S → a A c
A → x S
A→
2 1x
A→xS
S → a A c
3
S
A→xS
4
A
S → a A c
18 od 34
c
1
5
S→aAc
<A>
S1
2
S’ → S 
x
1
S
Novo
Stanje
Akcija
6
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 12
Za zadanu gramatiku izgradite LR(1) parser.
(1)<S> → b <A> <B>
(3)<B> → b
(2)<A> → b <B> c
LR(1) stavka:
A  a  b, { a }

S'  A y  ab y
1. a  ZAPOČINJE( y )

2. Ako y   , a = 
19 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 12
Izgradnja -NKA :
(1)<S> → b <A> <B>
(3)<B> → b
(2)<A> → b <B> c
G=(V, T, P, S) -NKA M=(Q, , , q0, F)
• Q = {sve LR(1) stavke gramatike G}  {q0}
• = T  V
• Funkcija prijelaza 
a) (q0, ) = { S  a, {  } | Sa  G }
b) ((AaXb,{a1, a2, ..., an}), X) = {AaXb,{a1, a2, ..., an}}
c) ((A  a B b,{ a1, a2, ..., an }), ) = { B   g, {b} | Bg  G}
b  ZAPOČINJE(b)
20 od 34

ili b  
b  {a1, a2, ..., an}
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 12
-NKA :
q0

<B> → b  {}
b
<S> → b <A> <B> {}
<B> →  b {}
b
<S> → b  <A> <B> {}

<A>
<S> → b <A>  <B> {}
<A> → b <B> c {b}
<B>
b
<S> → b <A> <B>  {}
<A> → b  <B> c {b}

<B>
<B> →  b {c}
<A> → b <B>  c {b}
c
b
<B> → b  {c}
21 od 34

<A> → b <B> c  {b}
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 12
DKA:
<S> → b <A> <B> {}
0
<B> → b  {}
b
<S> → b  <A> <B> {}
<A> → b <B> c {b}
1
<A>
<S> → b <A>  <B> {}
<B> →  b {}
3
b
<B>
b
<A> → b  <B> c {b}
<B> →  b {c}
2
<B> → b  {c}
<S> → b <A> <B>  {}
<B>
<A> → b <B>  c {b}
b
22 od 34
4
5
6
c
<A> → b <B> c  {b}
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
8
7
Zadatak br. 12
Izgradnja tablica Akcija i NovoStanje:
•Tablica Akcija
a) LR stavka Aaab, {a1, a2, ..., an} u stanju s (s, a) = t
Akcija[s, a]=Pomakni(t)
b)Potpuna LR stavka Aa, {a1, a2, ..., an} u stanju s
a je u skupu {a1, a2, ..., an}
Akcija[s, a]=Reduciraj(Aa)
c) LR stavka S'S, {} u stanju s
Akcija[s, ]=Prihvati()
•Tablica NovoStanje
a) (s, A) = t
NovoStanje [s, A]= Stavi(t)
23 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 12
Stanje
Akcija
b
c

<S>
<A>
<B>
0
P1
1
P2
2
P5
S6
3
P4
S7
S3
R3
4
5
R3
6
P8
Prihvati
7
8
24 od 34
Novo Stanje
R2
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 13
• Izgradite atributnu prijevodnu gramatiku koja parsira parove
binarnih brojeva zapisane u obliku
x1 x2 x3 … xn ¤ y1 y2 y3 … ym
xi, yi  {0, 1}
• Simbol ¤ predstavlja operator zbrajanja koji za neparne bitove
oba broja uzima vrijednost 0. Bitovi se broje od najmanje
značajnog prema najznačajnijem, počevši od nule.
Primjer:
01010010 ¤ 1011011011 = 01010000 + 0001010001
• Proširite izgrađenu gramatiku svojstvima i akcijskim
znakovima koji računaju rezultat primjene operatora ¤ izražen
u dekadskom obliku. Brojevi mogu imati proizvoljan broj
znamenaka.
25 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 13
Gramatika koja generira zadani jezik:
(1)
<S> → <Z> ¤ <Z>
(2)
<Z> → <Z> 0
(3)
<Z> → <Z> 1
(4)
<Z> → 0
(5)
<Z> → 1
Izgradnja atributne prijevodne gramatike:
• Znakovima gramatike dodjeljuju se svojstva
• Definiraju se pravila računanja vrijednosti svojstava
• Dodavanje akcijskih znakova, uz pojednostavljenje
pravila računanja svojstava
26 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 13
Izvedena i nasljedna svojstva:
(1)
<S>
Rez
→ <Z>
vr1, br1
¤ <Z>
vr2, br2
Rez ← vr1 + vr2 , br1 ← 0, br2 ← 0
(2)
<Z>
Vr, Br
→ <Z>
Vr ← vr * 2 ,
(3)
<Z>
Vr, Br
→ <Z>
vr, br
0
br ← Br + 1
vr, br
1
Vr ← vr * 2 + ((Br+1) % 2)*1,
(4)
<Z>
Vr, Br
br ← Br + 1
→ 0
Vr ← 0
(5)
<Z>
Vr, Br
→ 1
Vr ← ((Br+1) % 2)*1
27 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 13
Akcijski znakovi:
(1)<S>
Rez
→ <Z>vr1,br1 ¤ <Z>vr2,br2{Zbroji}p,q,r
br1 ← 0, br2 ← 0, p ← vr1, q ← vr2, Rez ← r
(2)<Z>Vr,Br→ {Uvećaj}p,q<Z>
vr,br0{IzračunajVr_0}r,z
p ← Br, br ← q, r ← vr, Vr ← z
(3)<Z>Vr,Br→{Uvećaj}p,q<Z>vr,br1{IzračunajVr_1}r,w,z
p ← Br, br ← q, r ← vr, w ← Br, Vr ← z
(4)<Z>
Vr,Br
→ 0
Vr ← 0
(5)<Z>
Vr,Br
→ 1{IzračunajVr_2}r,w
r ← Br, Vr ← w
28 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 14
• 14. Izgradite potisni automat za zadanu atributnu
prijevodnu gramatiku. Za sve akcije Zamijeni prikazati
stanje na stogu neposredno prije i neposredno poslije
primjene akcije.
(1)
<S> →
ap
bq
<A>r
{X v}
v  p  q + r
(2)
<A>p →
aq
<B>r
p  q + r
(3)
<B>p →
cq
p  q
•Dodavanje akcijskih znakova
•Izgradnja PA za prijevodnu gramatiku
•Izgradnja PA za atributnu prijevodnu gramatiku
29 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 14
Dodavanje akcijskih znakova:
(1)
<S> →
ap
bq
<A>r {X
{R}
v}x1,
x1
v  p  qx2+ 
r q
(2)
<A>p →
aq
<B>r {Zbroj}x1,
x1
p  q + rx2  r
(3)
<B>p →
x2, x3, x4
x3  r
{X v}
v  x4
x2, x3
p  x3
cq
p  q
30 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 14
Izgradnja potisnog automata za prijevodnu gramatiku:
<A>  x b f a
Izlaz ( xf ); Zamijeni ( ar ); Pomakni;
<A>  x
Izlaz ( x ); Izvuci; Zadrži;
<A>  x a
Izlaz ( x ); Zamijeni ( ar ); Zadrži;
{x}  
Izlaz ( X ); Izvuci; Zadrži;
31 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 14
a
b
c

<S>
(1)
-
-
-
<A>
(2)
-
-
-
<B>
-
-
(3)
-
b
-
Izvuci; Pomakni;
-
-

-
-
-
Prihvati;
{R}
Izlaz({R});
Izvuci; Zadrži;
{X}
Izlaz({X}):
Izvuci; Zadrži;
{Zbroj}
Izlaz({Zbroj}
Izvuci; Zadrži;
(2)<S>
<A>→<B>
→ apab→<B>
cq{Zbroj}
(1)
<A>
{R} {X}
(1) Zamijeni({X}{R}<A>b); Pomakni;
(2) Zamijeni({Zbroji}<B>); Pomakni;
(3) Izvuci; Pomakni;
32 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 14
Izgradnja potisnog automata za atributnu prijevodnu gramatiku:
• pored znakova gramatike, na stog se stavljaju vrijednosti
njihovih svojstava
• Nasljedna svojstva
• Znak na vrhu stoga – moguće odrediti vrijednost
• Stavljanje znaka na stog – prazno mjesto
• Izvedena svojstva
• kazaljka koja pokazuje na mjesto zapisa svojstava
odredišta
33 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika
Zadatak br. 14
a
b
a
b
c

<S>
(1)
-
-
-
<A>
(2)
-
-
-
<B>
-
-
(3)
-
b
-
Izvuci; Pomakni;
-
-

-
-
-
Prihvati;
{R}
{Zbroj}
{R}
Izračunaj izraz p  q + r koristeći vrijednosti u tri polja ispod
<B>
znaka
{R} na stogu,
rezultat zapiši u polje na koje pokazuje kazaljka u četvrtom polju;
<S>
Izvuci; Zadrži;

{X}
<A>
Stog
{Zbroji}
Ispiši rezultat
aritmetičkog izraza;
Izvuci; Zadrži;
Zbroji vrijednosti u dva {X}
polja ispod znaka {Zbroji} na stogu,
<A>
rezultat zapiši u polje na koje pokazuje kazaljka u trećem polju;
<S> Zadrži;
Izvuci;

(1) Zamijeni
(1)
(2)
Stog
prema
Stog
slici 1; Pomakni;
(2) Zamijeni
prema{R}
slici 2; Pomakni;
<S>p →→ aa
b
<A>
<A>
<B>
{Zbroj}
pq
q
r
x1, x2, x3,
r
x3 x4
{X v}
(3)
Izvuci;
Pomakni;
(3)
→x2
 x3
q  x4
x1  x1
p <B>
x2
q c
v
q x3
q p
r  ppr 
34 od 34
Copyright © 2011 Srbljić, Žužak, Skrobo, Popović, Budiselić, Pavlić: Prevođenje programskih jezika