next up previous contents
Next: Statica Up: Miez - Core Previous: Stive   Cuprins

Program

Din puncte de vedere static, un program este un arbore de blocuri; acestea provin din fie direct din fisierul sursa, fie din alte fisiere incluse. Structura este deci colectia de reguli privitoare la blocuri si fisiere.

Din punct de vedere dinamic, fluxul unui program este o stiva de instante ale blocurilor-nod din arborele static. Un bloc-nod poate avea mai multe instante pe stiva, cea mai de sus fiind ultima apelata.
Stiva prevede prin definitie posibilitatea existentei unei liste de variabile, pentru fiecare instanta a unui bloc;

Cele doua structuri de date pot identifica, pana la un punct, cele doua faze ale executiei unui program sursa plint: verificare si constructie sintactica, respectiv executie semantica. In prima faza, se prelucreaza numainu chiar asa arborele de blocuri, in a doua numai stiva de instante.

Tipurile de date ale programului sunt urmatoarele: [first=29,last=39]plint/prog/types.h

Structurile de date detaliate sunt:

lista de variabile
Este o lista simplu inlantuita de variabile (memorii la variabile) pe stiva (home); numele variabilelor este index in tabela de hash a programului, iar data propriu-zisa este o memorie tablou cu o variabila. Mai exista un flag care spune daca variabila a fost folosita sau nu, sub forma de avertisment. [first=59,last=69]plint/prog/data.h
semnatura procedura
Specifica numele si aritatea (numarul de argumente); numele face parte din namespaceul global din hashul programului: [first=70,last=78]plint/prog/data.h
nod arbore
Despre un nod arbore (tree) se stie nivelul sau, nodul parinte, nodurile fii, daca e procedura, semnatura, tipul blocului, tipul secventei de apel (metoda, normala sau procedura), un flag folosit pentru a cunoaste pe parcursul parsarii si executiei ce informatii sunt disponibile (valide) din aceasta structura; pe parcursul executiei pastreaza si o referinta la instanta curenta de pe stiva: [first=90,last=128]plint/prog/data.h
nod stiva
lstinputlisting[first=186,last=200]plint/prog/data.h Un nod de pe stiva este o instanta a unui nod arbore. Membrul ``block'' contine un pointer ``.src'' de tip ``plint_tree_t'' catre nodul arbore corespunzator. Toate variabilele de pe aceasta instanta a unui bloc se tin intr-o lista ce incepe cu ``head'', care este variabila implicita a oricarui bloc; in caz ca e metoda, blocul mai contine o variabila speciala, anume ``self''. In afara de aceste cazuri, variabilele normale se tine mai incolo in lista, fiind in numar de ``count''. Stiva e dublu inlantuita pentru a permite vizitarea usoara a nodurilor ei. Membrul ``proc'' reprezinta instanta cea mai recenta de pe stiva a procedurii celei mai apropiate care inglobeaza blocul al carui instanta este nodul stiva din varf.
context program
De aici se pleaca in vizitarea/prelucrarea/modificarea structurilor de date ce tin evidenta arborilor si stivelor: [first=204,last=212]plint/prog/data.h


Subsections
next up previous contents
Next: Statica Up: Miez - Core Previous: Stive   Cuprins
Sebastian Glita 2002-06-19