IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Besoin d'aide pour un parseur HTML


Sujet :

C

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Par défaut Besoin d'aide pour un parseur HTML
    Bonjour,

    Voila je débute en langage C, et je viens de faire une petit programme qui analyse le contenu d'un fichier .html et voir si les balises sont corrects ou non.

    Le code n'est pas au top, mais c'est dèjà un bon début je trouve

    Rapide explication:

    Tout d'abord, mon analyse se fait à l'aide d'automate, c'est à dire qu'a chaque caractère lu, je passe d'un état à l'autre:

    "<": Etat un qui signifie début balise
    "/": Etat deux qui signifie qu'on est dans balise fermante.
    "a-z,A-Z": Etat trois qui nom de la balise fermante.
    "[espace ou tabulation]": Etat cinq => Attribut de la balise...
    etc...

    Le programme ouvre un fichier donné, rapporte le 1er caractère, après il le teste, et au fur et a mesure qu'il lit le fichier, il transite d'un etat à un autre, sauf erreur syntaxique, il le signale et s'arrete.

    Pour l'instant j'ai fait en sorte qu'il s'arrête dés qu'il trouve le ">", fin de balise, mais je trouve que mon code est mal organisé, j'aimerais l'optimiser mais je ne trouve pas comment.

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include <stdio.h>
    #include <stdlib.h>
    typedef enum {
        zero, un, deux, trois, quatre, cinq, six, sept, huit, neuf
    } etats;
     
    int main(int argc, char const *argv[])
    {
    	FILE *fichier;
    	etats courrant = zero;
        if(fichier = fopen("test.html", "r"))
        {
            char c = fgetc(fichier);
            while (c!=EOF)
            {
                switch(courrant)
                {
                    case zero:
                        if (c == '<') { courrant = un; c = fgetc(fichier); break; }
                        else c = fgetc(fichier);
     
                    case un:
                        if ((c >= 'a') && (c <= 'z')) { printf("Etat quatre\n"); courrant = quatre; c = fgetc(fichier); break; }
                        if (c == '/') { printf("etat deux\n"); courrant = deux; c = fgetc(fichier); break; }
                        else { printf("Syntax Error\n"); return 1; }
     
                    case deux:
                        if ((c >= 'a') && (c <= 'z')) { printf("Etat trois\n"); courrant = trois; c = fgetc(fichier); break; }
                        else { printf("Syntax Error\n"); return 1; }
     
                    case trois:
                        if (c == '>') { printf("fin de la balise"); return 1;}
                        if (c == ' ') {printf("Syntax error\n"); return 1;}
                        else { printf("Etat trois\n"); courrant = trois; c = fgetc(fichier); break; }
                    case quatre:
                        if (c == ' ') { printf("Etat cinq\n"); courrant = cinq; c = fgetc(fichier); break; }
                        if (c == '>') { printf("fin de la balise"); return 1;}
                        else { printf("Etat quatre\n"); courrant = quatre; c = fgetc(fichier); break; }
     
                    case cinq:
                        if (c == ' ') { printf("Etat cinq\n"); courrant = cinq; c = fgetc(fichier); break;}
                        if ( c == '>'|| c == '<'|| c == '=') { printf("Syntax Error\n"); return 1;}
                        else { printf("Etat six\n"); courrant = six; c = fgetc(fichier); break; }
     
                    case six:
                        if (c == '=') { printf("Etat sept\n"); courrant = sept; c = fgetc(fichier); break;}
                        else { printf("Etat six\n"); courrant = six; c = fgetc(fichier); break; }
     
                    case sept:
                        if (c == '"'|| c =='\'') { printf("Etat huit\n"); courrant = huit; c = fgetc(fichier); break;}
                        else { printf("Etat quatre\n"); courrant = quatre; c = fgetc(fichier); break; }
     
                    case huit:
                        if (c == '"'|| c =='\'') { printf("Etat neuf\n"); courrant = neuf; c = fgetc(fichier); break;}
                        else { printf("Etat huit\n"); courrant = huit; c = fgetc(fichier); break; }
     
                    case neuf:
                        if (c == ' ') { printf("Etat cinq\n"); courrant = cinq; c = fgetc(fichier); break;}
                        if (c == '>') { printf("fin de la balise"); return 1;}
                        else { printf("Syntax Error\n"); return 1; }
                }
            }
        }
        else printf("Couldn't open the file.\n");
        printf("Operation terminated");
        fclose(fichier);
    	return 0;
    }
    Voila j'espère qu'il n'est pas trop pénible à lire ou à comprendre

    Je remercie d'avance ceux qui ont pris le temps de le lire et d'y répondre !

    Cordialement.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [RegEx] Besoin d'aide pour une regex (html)
    Par benjamin122 dans le forum Langage
    Réponses: 10
    Dernier message: 07/09/2012, 23h33
  2. Besoin d'aide pour modifier un fichier html
    Par killahpriest dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 22/08/2010, 15h35
  3. [HTML 4.0] Besoin d'aide pour la programmation d'un menu en html
    Par JaMJaMs dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 03/12/2009, 20h02
  4. Besoin d'aide pour quelques bugs sur page html
    Par Xplosive dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/10/2008, 19h38
  5. [Tableaux] Besoin d'aide pour parser du HTML
    Par vallica dans le forum Langage
    Réponses: 2
    Dernier message: 08/10/2006, 22h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo