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
EE1+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
EE1+T
E.nptr:=mknode(‘+’,E1.nptr,T.nptr)
EE1-T
E.nptr:=mknode(‘-’,E1.nptr,T.nptr)
ET
E.nptr:=T.nptr
T(E)
T.nptr:=E.nptr
Tid
T.nptr:=mkleaf(id,id.entry)
Tnum
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