Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
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 />
}