Languages and Finite Automata

Download Report

Transcript Languages and Finite Automata

Atribūtu gramatikas
1
Kompilatoram var būt nepieciešama
papildus informācija, kas nav atkarīga
no sintakses:
•
•
•
•
tipu pārveidošana piešķiršanās
parametru atbilstības noteikšana
masīva robežu noteikšana
u.c.
2
Šādu “semantisku” informāciju var būt
nepieciešams izskaitļot no citām
vērtībām un tā var būt atkarīga no
nelokālas informācijas.
3
Risinājums: anotēt analīzes koku
• pievienot atribūtus katrai virsotnei
(fiziski, protams, var atrasties citur). Ja
analīzes koka virsotni uzskata par rakstu
ar laukiem, tad atribūts ir lauka vārds
• definēt atribūtu vērtību aprēķināšanas
likumus (vienādojumus)
4
Definīcija
Atribūtu gramatika ir bezkonteksta
gramatika, kuras
• katram simbolam ir piesaistīta
atribūtu kopa
• katrai produkcijai ir piesaistīti šo
atribūtu aprēķināšanas likumi
5
Atribūtu veidi
Vērtības tiek aprēķinātas no
konstantēm un citu atribūtu vērtībām
• sintezētie
•
vērtība tiek aprēķināta no bērnu atribūtiem
• augšupejoša aprēķināšanas kārtība
• mantotie (inherited)
•
vērtība tiek aprēķināta no vecāka un brāļiem
• gramatiku vienmēr var pārrakstīt tā, lai no šī
tipa atribūtiem izvairītos
6
Piemērs
S  En
E  E1  T
print(E.val)
E.val : E1.val  T.val
E T
T  T1 * F
E.val : T.val
T.val : T1.val * F.val
T F
F  (E)
F  cipars
T.val : F.val
F.val : E.val
F.val : cipars.lexval
7
S
3*5+4n
n
E.val=19
E.val=15
+
T.val=15
T.val=3
F.val=3
*
F.val=5
T.val=4
F.val=4
cipars.lexval=4
cipars.lexval=5
cipars.lexval=3
8
Mantotie atribūti
D  TL
L.in : T .type
T  int
T .type : integer
T  real
L  L1 , id
T .type : real
L1.in : L.in
addtype(id .entry, L.in)
L  id
addtype(id .entry, L.in)
9
real id1,id2,id3
D
L.in=real
T.type=real
real
L.in=real
L.in=real
,
,
id3
id2
id1
10
Dažas piezīmes
• termināļus var asociēt ar vērtībām, ko saņem no
skenera. Šīs ievada vērtības tiek asociētas ar
sintezētajiem atribūtiem
• starta simbolam nevar būt mantotie atribūti
• gramatikas simbola sintezētā atribūta vērtība var būt
atkarīga no šī paša simbola mantotā atribūta vērtības
• semantikas likumi tiek definēti katrai produkcijai
atsevišķi
• semantikas likumi, kas piesaistīti produkcijai
A<alfa> jāspecificē visas:
• A sintezēto atribūtu vērtības
• <alfa> mantoto atribūtu vērtības
11
Piemērs
Skaitlis  Sist Cipvirkne
Cipvirkne  Cipvirkne Cipars | Cipars
Cipars  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
Sist  B | O
Skaitļa pieraksts binārā vai oktālā
skaitīšanas sistēmā ( B010, O37)
Jāaprēķina skaitļa vērtība
12
Piemērs
Skaitlis  Sist Cipvirkne
Cipvirknetype : Sisttype
Skaitlisval : Cipvirkneval
Cipvirkne  Cipvirkne Cipars
Cipvirkne1type : Cipvirknetype
Ciparstype : Cipvirkne1type
Cipvirkneval : Cipvirkne1val * Cipvirknetype
 Ciparsval
Cipvirkne  Cipars
Cipars type : Cipvirknetype
Cipvirkneval : Ciparsval
13
Piemērs(turp.)
Cipars  0
Cipars  1
Cipars  2
...
Ciparsval : 0
Ciparsval : 1
if Ciparstype  8
then Cipars val : 2 else Cipars val : NULL
Sist  B
Sist  O
Sisttype : 2
Sisttype : 8
14
Atkarības grafi
• Ja atribūts b kādā analīzes koka
zarā ir atkarīgs no atribūta c
vērtības, tad b vērtības aprēķināšana
var notikt tikai pēc c vērtības
aprēķināšanas
• Atribūtu vērtību aprēķināšanas
secību var attēlot ar atkarības grafa
palīdzību
15
Atkarības grafi (dependency graph)
• Katru semantisko likumu pārveido
formā b:=f(c1,c2,...,ck), ja
nepieciešams, ievedot fiktīvu
sintezēto atribūtu b
• Katram atribūtam atbilst virsotne
• Šķautne iet no virsotnes c uz
virsotni b tad un tikai tad, ja b ir
atkarīgs no c.
16
EE1+E2
E.val:=E1.val+E2.val
E val
+
E1 val
E2 val
17
D
real id1,id2,id3
in 5L.in=real 6
4
T.type=real
type
,
real
id3
3 entry
in 7 L.in=real 8
in 9 L.in=real10
id1
1
entry
,
id2
2 entry
18
Topoloģiskā kārtošana
Orientēta acikliska grafa (dag)
topoloģiskā kārtošana ir tā virsotņu
m1,m2,...,mk sakārtošana tādā secībā,
lai jebkurai šķautnei šajā grafā no mi uz
mj , virsotne mi atrastos pirms virsotnes
mj.
19
Semantisko likumu apstrādes metodes
 Analīzes koka metodes.
Atribūtu aprēķināšanas kārtību atrod no atkarības
grafa. Nedarbojas, ja grafā atrodas cikls.
 Likumbāzētas metodes.
Kompilatora veidošanas laikā tiek analizēti ar
produkcijām saistītie likumi. Katrai produkcijai atribūtu
rēķināšanas secība tiek pilnīgi precīzi noteikta.
 “Nevērīgās” metodes.
Apstrādes kārtību nosaka neizmantojot semantiskos
likumus. Ja translācija notiek analīzes laikā, tad
apstrādi nosaka analīzes metodes.
20
Analīzes koks
pozicija := sakums + atrums * 17
Piešķiršana
:=
Identifikators
Izteiksme
pozicija
Izteiksme
+
Izteiksme
Identifikators
Izteiksme
*
Izteiksme
sakums
Identifikators
atrums
vesels skaitlis
17
Sintakses koks
id1 := id2 + id3 * 17
:
=
id1
+
*
id2
id3
17
Sintakses koka būve
 mknode(op,left,right) izveido
virsotni ar iezīmi op un diviem laukiem
ar norādēm.
 mkleaf(id,entry) izveido
identifikatora virsotni ar iezīmi id un
norādi uz ierakstu simbolu tabulā.
 mkleaf(num,val) izveido virsotni ar
iezīmi num un lauku, kas satur skaitļa
vērtību.
Katra no funkcijām kā rezultātu atdod
norādi uz tikko izveidoto virsotni.
23
Sintakses koka būve
id1 := id2 + id3 * 17
:=
id
p1:=mkleaf(id,entryid3);
p2:=mkleaf(num,17);
p3:=mknode(‘*’,p1,p2);
p4:=mkleaf(id,entryid2);
p5:=mknode(‘+’,p4,p3);
p6:=mkleaf(id,entryid1);
p7:=mknode(‘:=’,p6,p5);
1
+
id
2
*
id
3
num
17
Ja nav reizināšanas:
Produkcija
Semantikas likums
EE1+T
E.nptr:=mknode(‘+’,E1.nptr,T.nptr)
EE1-T
E.nptr:=mknode(‘-’,E1.nptr,T.nptr)
ET
E.nptr:=T.nptr
T(E)
T.nptr:=E.nptr
Tid
T.nptr:=mkleaf(id,id.entry)
Tnum
T.nptr:=mkleaf(num,num.entry)
25
Izteiksmju orientētie acikliskie grafi
Var uzlabot (nebūvēt
pilnu koku), ja vispirms
apskatās vai tāda
virsotne jau nav priekšā.
a+a*(b-c)+(b-c)*d
+
+
*
d
*
-
a
b
c
26
1.piemērs
Izveidojiet izteiksmes
a+a+(a+a+a+(a+a+a+a))
aciklisko grafu (pieņemot, ka + ir kreisi
asociatīva operācija)!
27
a+a+(a+a+a+(a+a+a+a))
+
+
+
+
+
a
28
2.piemērs
Izveidojiet izteiksmes
a+(a+a)+(a+(a+a)+a+(a+a))
aciklisko grafu (pieņemot, ka + ir kreisi
asociatīva operācija)!
29
+
a+(a+a)+(a+(a+a)+a+(a+a))
+
+
+
+
a
30