1 Vai valoda L={a n b n c n | n≥1} ir aprakstāma ar bezkonteksta gramatiku? Neliels atskats nesenajā pagātnē … Protams, nē! Vai tas nozīmē, ka joprojām nemākam noskaidrot vārda piederību valodai? Protams, nē! Kas tad ir mainījies?
Jan 21, 2016
1
Vai valoda L={anbncn | n≥1} ir aprakstāma ar bezkonteksta gramatiku?
Neliels atskats nesenajā pagātnē …
Protams, nē!Vai tas nozīmē, ka joprojām nemākam noskaidrot vārda piederību valodai?
Protams, nē! Kas tad ir mainījies?
2
S ABCA aA AaB bB BbC cC Cc
Kaut ko zinām par atribūtiem
L’=L(a+b+c+)={anbmck | n,m,k≥1}
3
S ABC
A aA A1aB bB B1bC cC C1c
A.skaits := 1
B.skaits := 1
C.skaits := 1
A.skaits := A1.skaits+1
B.skaits := B1.skaits+1
C.skaits := C1.skaits+1
S.der := (A.skaits=B.skaits)&(B.skaits=C.skaits)
4
• Sintakses vadītas definīcijas (syntax-
directed definitions) - augsta līmeņa specifikācijas, precīzi nenorādot translācijas kārtību.
•Translācijas shēma (translation scheme) - precīzi norāda translācijas kārtību.
Formālās apraksta metodes
5
Katra produkcija A <alfa> ir saistīta ar likumu kopu formā b=f(c1,c2,...,cn), kur ir spēkā viens no diviem gadījumiem:
• b ir A sintezētais atribūts un c1,c2,...,cn ir produkcijas simboliem piederoši atribūti
• b ir kāda produkcijas labās puses simbola mantotais atribūts un c1,c2,...,cn ir produkcijas simboliem piederoši atribūti.
Vienmēr b ir atkarīgs no c1,c2,...,cn.
Sintakses vadītas definīcijas
Atribūtu gramatika ir sintakses vadīta definīcija, kur semantisko likumufunkcijām nav blakusefektu.
6
• semantiskās darbības tiek iekļautas produkciju labajā pusē, kas nosaka atribūtu aprēķināšanas kārtību
Translācijas shēma
7
ETRRaddop T {print(addop.lexeme)}R1|
Tnum {print(num.val)}
Šeit addop un num – atbilst termināļiem(darbības zīmes (+ vai - ) vai cipari)
Kas tiks izvadīts, ja ievadā būs 9-5+2 ?
8
9-5+2 95-2+
E
T R
9- T R
5
2
+ T R
1
4
52
3
9
• S-atribūtu gramatikas(S-attributed grammars)
• L-atribūtu gramatikas(L-attributed grammars)
Izdevīgas tāpēc, ka nav nepieciešams atklātā veidā būvēt analīzes koku
Atribūtu gramatiku tipi
10
• tikai sintezēti atribūti
• sintakses vadīta definīcija ir pietiekama tās aprakstīšanai
• vērtības var tikt aprēķinātas augšupejoši, izmantojot steku
S-atribūtu gramatikas
11
1. N B$
2. B B11
3. B B10
4. B 1
5. B 0
Bināra skaitļa vērtības aprēķināšana
Kādas darbības pie katras produkcijas jāveic?
12
1. N B$ N.val = B.val
2. B B11 B.val = B1.val * 2 + 1
3. B B10 B.val = B1.val * 2
4. B 1 B.val = 1
5. B 0 B.val = 0
Bināra skaitļa vērtības aprēķināšana
Vai kāds vēl atceras, kā uzbūvēt analizatoru?
13
1. N B $ N.val = B.val2. B B11 B.val = B1.val * 2 + 1
3. B B10 B.val = B1.val * 2
4. B 1 B.val = 15. B 0 B.val = 0
0 1 $ B
1 s5 s6 g2
2 s4 s3 acc
3 r(2) r(2) r(2)
4 r(3) r(3) r(3)
5 r(5) r(5) r(5)
6 r(4) r(4) r(4)
14
1. N B $ N.val = B.val2. B B11 B.val = B1.val * 2 + 1
3. B B10 B.val = B1.val * 2
4. B 1 B.val = 15. B 0 B.val = 0
Steks Ievads
$1 101$ shift 6
$1(1 1)6 01$ reduce 4
$1(B 1)2 01$ shift 4
$1(B 1)2(0 0)4 1$ reduce 3 (B1.val atrodas stekā otrajā vietā no augšas)
$1(B 2)2 1$ shift 3
$1(B 2)2(1 1)3 $ reduce 2 (B1.val atrodas stekā otrajā vietā no augšas)
$1(B 5)2 $ accept
(Simbols val)Stekā kopā ar simbolu glabās arī vērtību
0 1 $ B
1 s5 s6 g2
2 s4 s3 acc
3 r(2) r(2) r(2)
4 r(3) r(3) r(3)
5 r(5) r(5) r(5)
6 r(4) r(4) r(4)
15
Kā aprēķināt nepieciešamās vērtības skatoties tikai uz steku un zinot, kāda darbība tiek pielietota?
16
• katrs bērnu zars ievieto tā sintezēto atribūtu vērtības stekā
• pie reducēšanas vecāks tās izņem un izmanto savu atribūtu vērtību aprēķināšanai, kuras pēc tam atkal tiek ievietotas stekā
S-atribūtu gramatikas
17
1. N B$
2. B B11
3. B B10
4. B 1
5. B 0
Bināra skaitļa vērtības aprēķināšana
print(val(top))
val(newtop):=val(top-1)*2+val(top)
val(newtop):=val(top-1)*2+val(top)
18
print(val(top))
Cits piemērs
ciparsF
EF
FT
FTT
TE
TEE
ES
)(
*
val(newtop):=val(top-2)+val(top)
val(newtop):=val(top-2)*val(top)
val(newtop):=val(top-1)
19
Gramatikai SL.L | L | L. | .L LLB | B B0 | 1izveidot atribūtu gramatiku, ar kuras palīdzību varētu aprēķināt binārā skaitļa vērtību! Piemēram, 101.101 vērtība ir 5.625,
11, 11., 11.000 vērtība ir 3, .01 vērtība ir 0.25
20
Iepriekšējais uzdevums, ja vienīgais B sintezētais atribūts ir c, kas norāda, kāds ir šī cipara “ieguldījums” kopējā vērtībā.
Piemēram, 101.101 pirmā vieninieka ieguldījums ir 4, bet pēdējā – 0.125 .
21
• gan sintezēti, gan mantoti atribūti
• lieto translācijas shēmu aprakstīšanai
• katrs A sintezētais atribūts produkcijā A X1X2...Xn ir atkarīgs tikai no A
mantotajiem atribūtiem un Xi atribūtiem
• katrs mantotais atribūts Xi produkcijā A X1X2...Xn ir atkarīgs tikai no:
• brāļu pa kreisi atribūtiem
• A mantotajiem atribūtiem
L-atribūtu gramatikas
22
Semantiskās darbības tiek iekļautas sekojoši:
• darbība, kas saistīta ar sintezēto atribūtu tiek novietota produkcijas labajā galā (to var aprēķināt tikai tad, kad visu atribūtu vērtības uz kurām ir atsauces, ir aprēķinātas)
• darbība nedrīkst atsaukties uz sintezēto atribūtu pa labi no šīs darbības
• labās puses simbola atribūta mantotajiem atribūtiem jābūt izrēķinātiem darbībās pirms šī simbola
L-atribūtu gramatikas
23
Kā šādas gramatikas iekļaut augšupejošā analīzē?
• Problēma: AB {C.i=f(A.s)} C
kurā brīdī un kā veikt atribūtu aprēķināšanu (C tobrīd vēl nav stekā)
• Risinājums: Iekļaut papildus produkciju, kas izveidota vienīgi šim mērķim:
ABA’C {A’.i=A.s; C.i=A’.s}
A’ {A’.s=f(A’.i)}
Analizētājam diez ko nepatīk produkcijas
L-atribūtu gramatikas
24
Praksē:
• Translēt gramatiku ar L-atribūtu definīcijām paredzošajā analīzē
• problēma: kreisā rekursija
• Translēt gramatiku ar L-atribūtu definīcijām augšupejošā analīzē
• problēma: mantoto atribūtu aprēķināšana
L-atribūtu gramatikas
25
Jātiek vaļā no kreisās rekursijas:
L-atribūtu gramatikas paredzošajā analīzē
AA1Y {A.a = g(A1.a, Y.y)}
AX {A.a=f(X.x)}
AX {R.i = f(X.x)} R {A.a = R.s}
RY {R1.i = g(R.i,Y.y)} R1 {R.s=R1.s}
R {R.s = R.i}
26
Pārvietot atribūtu aprēķināšanas likumu no produkcijas vidus uz beigām:
• ievieš fiktīvu (markera) netermināli M
• ievieto šo netermināli likuma vietā
• pievieno produkciju M un pievieno atribūtu aprēķināšanas likumu pie šīs produkcijas
L-atribūtu gramatikas augšupejošā analīzē
27
Mantotie atribūti analizētāja stekā.
• ja mantotie atribūti tiek aprēķināti ar kopēšanas palīdzību (t.i. Y.i=X.s) tad, ja nepieciešams, jāņem vērtība X.s no steka
• šī pieeja strādā tikai tad, ja skaidri zināms, kur stekā atrodas X.s vērtība
L-atribūtu gramatikas augšupejošā analīzē
28
SaAC C.i=A.s
SbABC C.i=A.s
Cc C.s=g(C.i)
L-atribūtu gramatikas augšupejošā analīzē
Stekā starp A un C var atrasties arī B (bet var arī nebūt). Līdz ar to pie Ccsavēršanas C.i (A.s) var atrasties gan val[top-1], gan val[top-2].
29
SaAC C.i=A.s
SbABMC M.i=A.s C.i=M.s
Cc C.s=g(C.i)
M M.s=M.i
L-atribūtu gramatikas augšupejošā analīzē
Tagad pie Cc savēršanas C.i (A.s vai M.s) vienmēr atradīsies val[top-1].
30
Atribūtu dzīves ilgums
1
2
5
73
4 8
6
9
31
Ierobežojumi
Nelietojot globālus datus, dažas no semantiskajām akcijām nav iespējams veikt.Piemēram:pārbaudīt, vai mainīgais ir definēts pirms
izmantošanas,pārbaudīt mainīgā tipu un adresi,pārbaudīt, vai mainīgais ir lietots, vai nē.
32
Globālie dati
Ja daudz globālo datu tipu, kods kļūst grūti pārvaldāms.Daži, raksturīgākie izmantošanas veidi ar
skaidru mērķi:simbolu tabula,GOTO iezīmes,atliktās (forward) deklarācijas.