3Fermer5
PpHdLe 18/11/2003 à 12:00
Ca marche mal car:

main() {

}

est cense marcher smile

Fonction Skip: Saute toutes les directives de preprocessing, les espacs vides, les sauts de lignes, les commentaires.
Retourne un ptr vers un caractere.

Fonction SkipBloc: Saute un bloc { } pour acceder ou } correspondant. Retourne un ptr vers le char juste apres.

D'ou l'algo:
a = Skip(a);
si a ressemble a "machin truc (bidule) {" (Attention aux espaces et aux commentaire et aux directives! Conseil fait une fct NextWord) */
alors c'est un proto.
sinon a = ptr vers le ';' ou le le '{' qui suit.
Si a == '{', alors a = SkipBlock(a) -Gestion de bloc recursives-
sinon a = a+1;
Boucle infinie de ca

Verifie bien qu'il y est le bon nombre d'accolade.

Et a ta place je ferais une premiere passe automatique par le preprocesseur (gcc -E -o machin.e machin.c), car on peut aussi avoir:

int FUNCTION_DEF(f, (int x, int y))
{

}

Ou plus vicieux encore smile
En plus ca enleve les commentaires et les diretives de preprocessing smile