17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

- cãutarea urmãtorului identificator nume de functie;<br />

Cel putin douã dintre aceste functii au fost prezente si <strong>în</strong> programul anterior si vor fi<br />

probabil utile si <strong>în</strong> alte aplicatii care prelucreazã fisiere sursã C.<br />

Urmeazã functii specifice aplicatiei propuse:<br />

// cauta urmatorul nume de functie (apel sau definire)<br />

char* nxtfun (char * adr , char * rez) {<br />

char * p= adr;<br />

int i,found=0;<br />

char * kw[4]={"if","while","for","switch"};<br />

while (! found && (p= nxtid(p,rez))){<br />

i=get (kw,4,rez);<br />

if (i>=0) continue;<br />

while (isspace(*p))p++; // ignora spatii albe<br />

if (*p!='(')<br />

continue; // altceva decat nume de functie<br />

p= strchr(p+1,')')+1; // gasit nume de functie<br />

found=1;<br />

}<br />

return p;<br />

}<br />

// listare functii apelate dar nedefinite<br />

void listf (char * s) {<br />

char * funs[100]; int i,nf=0; //nume functii definite<br />

char * p=s;<br />

char fun[100]; // un nume de functie<br />

while ( p= nxtfun(p,fun)){ // p= adresa unui antet de functie<br />

while (isspace(*p)) p++; // ignora eventuale spatii<br />

if (*p=='{') // daca definitie<br />

nf=put(funs,nf,fun); // pune definitie in tabel<br />

else { // daca apel functie<br />

i = get(funs,nf,fun); // cauta in functii deja definite<br />

if (i 1);<br />

f= fopen (argv[1],"r");<br />

assert (f != NULL);<br />

while ( fgets (lin,256,f))<br />

listf (lin);<br />

}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!