next up previous contents
Next: Program Up: Parser Previous: Parser   Cuprins

Stive

Se cunoaste ca majoritatea arhitecturilor procesoarelor sunt de tip ``stack machine''; adica exista o stiva de memorie care e folosita pentru a tine date intr-un proces de avansare in timp in ``subrutine imbricate''; aceste date sunt date temporare utile, parametrii de apel si adrese de revenire.

Fie spre exemplu procedura urmatoare, in limbajul C:
\begin{lstlsting}{language=C}
...

Cand n va ajunge 0, in asteptarea apasarii unei taste, in urma apelurilor recursive, stiva arata cam asa:
STIVA
-asteptare tasta-
-adresa revenire-
i=0
d=0.
c='0'
n=0
-adresa revenire-
i=1
d=0.5
c='1'
n=1
-adresa revenire-
i=4
d=1.3333333333333
c='2'
n=2
-adresa revenire-

Daca acum impartime stiva unica in mai multe stive, cate una pentru fiecare slot din stiva initiala, putem obtine ceva de genul:
adr i d c n
-adresa revenire- 0 0. '0' 0
-adresa revenire- 1 0.5 '1' 1
-adresa revenire- 4 1.33 '2' 2

Aceasta este metoda folosita in plint. Generatorul bison fiind un automat finit nerecursiv iterativ si fiind scris in C, nu ofera suport pentru dealocarea automata a stivei proprii de neterminale si terminale, de exemplu la aparitia unui semnal. Acest deficit este surmontat de folosirea unui modul care se ocupa numai de stivele variabilelor ce intr-o varianta recursiva ar fi fost automate.

Astfel exista cate o stiva pentru variabile, referinte, valori, stringuri, tabele, hashuri, indecsi etc.

Aceste stive, in caz ca apare ceva neprevazut care intrerupe brusc analiza gramaticala (deci interpretarea), vor fi eliberate in final, eliberandu-se memoria pe care o foloesc elementele lor.


next up previous contents
Next: Program Up: Parser Previous: Parser   Cuprins
Sebastian Glita 2002-06-19