Documente Academic
Documente Profesional
Documente Cultură
ASPO se poate aplica doar la o clas redus dar important de gramatici iar
analizorul se poate construi uor manual, pe principiul de lucru al ASDR.
Gramatica trebuie s ndeplineasc urmtoarele dou cerine:
1) S nu aib producii vide (cu n partea dreapt).
2) n nici o parte dreapt s nu fie dou neterminale adiacente.
Gramaticile care satisfac ultima proprietate se numesc gramatici de operatori.
Relaia
Semnificaia
a b
a = b
a b
a are preceden fa de b
INTRARE
w$
Algoritmul propriu-zis:
(1) poziioneaz pointerul de intrare pe primul simbol din w;
(2) repeat forever
(3)
if att simbolul din vrful stivei ct i simbolul curent de intrare
(4)
sunt $ then return {acceptare}
else begin
(5)
fie a simbolul terminal cel mai apropiat de vrful stivei
i b simbolul curent de intrare;
(6)
if (a b) or (a = b) then begin {deplasare}
(7)
introdu b n stiv;
(8)
avanseaz cu o poziie pointerul de intrare
(9)
end else if a b then {reducere}
(10)
repeat
(11)
extrage din stiv
(12)
until terminalul din vrful stivei este n relaia
cu terminalul cel mai recent extras
(13)
else eroare ()
end
id
(
)
$
id
Exemplu: id(idid)-id/id
$ id ( id id ) - id / id $
Eid
$ ( id ...
Eid
$ ( id ) ...
Eid
$ ( ) ...
EEE
$ ( = ) - ...
E(E)
$ - ...
EEE
$ - id / ...
Eid
id >
(<
) >
$ <
Pentru a asigura reducerea la E a lui id i a (E), ntre terminalele care nu sunt
operatori se introduc urmtoarele relaii:
$ < (
$ < id
( = )
id > $
) > $
( < (
( < id
id > )
) > )
$ - / id $
Eid
$ - / $
EE/E
$ - $
EE-E
$E$
Acceptare
Funcii de preceden
>
<
Exemplu: (operator unar) mai prioritar dect & (operator binar). Conform
acestor reguli, expresia E& E&E va fi evaluat astfel: (E&( E)) &E.
Dac operatorul unar este n acelai timp i binar (cazul semnului -) situaia
se complic foarte mult, chiar dac cei doi operatori, identici ca form, ar avea
aceeai preceden.. Pentru exemplificare se poate studia tratarea irului id-id,
conform tabelei anterioare. O soluie posibil este modificarea ANLEX astfel nct
s returneze coduri lexicale diferite pentru cele dou situaii de utilizare a semnului
"-". Dac se realizeaz acest lucru, operatorul unar minus devine un operator
distinct i poate fi tratat cu regulile de mai sus. Trebuie totui menionat c nu este
simplu pentru ANLEX s disting ntre cele dou situaii, deoarece este nevoie s
priveasc operatorul n contextul n care apare.
a < b
a = b
a > b
dac
dac
dac
+
2
1
2
1
4
3
4
3
4
5
(
0
5
)
6
0
id
6
5
$
0
0
Se observ c f(id) > g(id) id > id, dei, n realitate, ntre id i id nu exist
relaie de preceden caz de eroare.
1)
2)
fid
f*
g*
g+
f+
f$
g$
+
2
1
4
3
id
4
5
$
0
0
10
11
id
INTRARE
... ab
cd ...$
id
(
)
$
id
e3
<
e3
<
>
=
>
>
e2
e4
>
e1
INTRARE
)$
INTRARE
)$
13
(
e3
<
e3
<
14
INTRARE
$
15
16