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

XML/XSL et SOAP Discussion :

Paser en XML [Flex&Bison]


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut Paser en XML [Flex&Bison]
    Bonjours a tous,

    Je suis actuellement en stage pour valider ma dernière année de DUT GEII (Génie Électrique et Informatique Industrielle).
    Comme pendant tout stage, j'ai un projet à réaliser.

    En effet, j'ai pour mission de réaliser un analyseur syntaxique avec Flex et Bison. La programmation de ce type n'étant vraiment pas le coeur de ma formation je rencontre quelques difficultés.
    Je dois parser des commentaires de fichier XML. Ces derniers sont rédigés en syntaxe wiki.

    Exemple :
    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
    /**
    		=Header=
    		§   Name:       Contrat structuré
    		§   Document:    File
    		§   Direction:  N/A
    		§   Authors:    Afidium - David Faveur (DF)
    		§   Language:   FR
    		§   Summary:    Un contrat structuré généré par Open Age et utilisé par WOrd pour générer le contrat papier.	
    		§   Version:    1
    		§   Implementation+_Host_+_Date_: 1 (Implémentation réelle du message) (im)
    		§   History+DF+2009-11-01+Create:    Création initiale du fichier
    		§	ToDo +DF+2009-11-27+Update: Intégrer les modifications prévues sur le référentiel	
     
    		=Usage=
    		Ce fichier est utilisé dans la génération papier du document. Il contient tous les éléments spécifiques permettant la génération du contrat
     
    		=Description=
    		Un contrat sous forme structuré contient les informations suivantes:
    		*Informations obligatoires
    		**le numéro de référence du contrat (Année-[Saison]-Timestamp
    		**le type de contrat (R, M, C)
    		...
    Je dois donc convertir cette syntaxe en code HTML par exemple :
    "=Header= bla bla bla" doit devenir "<Header> Bla Bla bla </Header>".

    Mais je rencontre d'énorme difficultés... C'est la première fois que je manipule Flex & Bison et le langage XML aussi.
    Un des problèmes rencontrés, par exemple, est que je ne sais pas comment lui faire savoir qu'il doit fermer les balises (Ex: </Header>). Car il y a un moment bien précis pour le faire...
    Si il fallait juste les ouvrir je pensais faire quelque chose dans ce style là :

    Flex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %{
    	#include <stdlib.h>
     
    %}
     
    "=Header="	return(HEADER);
    "=Usage="	return(USAGE);
    "=Structure="	return(STRUCTURE);
    "$"		return(Paragraphe);
    "*"		return(Element)
    "**"		return(SousElement);
    Bison :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    %token HEADER
    %token STRUCTURE
    %token USAGE
    %token Paragraphe
    %token Element SousElement
     
     
     
    %%
     
    ALO :
    	| HEADER 	{printf("<Header>");}
     
    ...
    Mais forcement là, ça ne marchera pas :-/

    Pouvez vous m'aider ?
    Merci d'avance !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut
    Je viens de trouver quelque chose... Mais je ne sais pas du tout si on peut faire ça :

    Flex :
    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
     
    %{
    	#include <stdlib.h>
     
            #define SV save_str(yytext)
     
            #define TOK(name) {SV ; return name;}
    %}
     
    "=Header="	        {SV = "Header" ; return(HEADER);}
    "=Usage="	        {SV = "Usage" ; return(USAGE);}
    "=Structure="	{SV = "Structure" ; return(STRUCTURE);}
    "$"		        return(Paragraphe);
    "*"		        return(Element)
    "**"		        return(SousElement);
    "LigneVide"         return(LigneVide);
    Bison :
    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
     
    %token HEADER
    %token STRUCTURE
    %token USAGE
    %token Paragraphe
    %token Element SousElement
     
     
     
    %%
     
    ALO :
    	| HEADER 	        {printf("<Header>");}
    	| STRUCTURE 	{printf("<Structure>");}
    	| USAGE 	        {printf("<Usage>");}
    	| LigneVide 	        {printf("</%s>",SV);}
     
    ...
    "LigneVide" sera bien entendu remplacé par la grammaire qu'y symbolise une ligne vide (que je n'ai pas encore trouvé xD).

    Qu'en pensez vous ? Est ce que cela est correct ?

    Merci d'avance.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut
    Up :-/

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Par défaut
    Bon, finalement j'en suis arrivé a là :

    Lex :
    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
     
    %{
    	#include <stdlib.h>
    	extern char SV[];
    	extern char Var[];
    	extern char Var2[];
    %}
     
    blancs          [ \t]+
     
    %%
    {blancs}       		 { /* On ignore */ }
     
    "=Header="		{SV = "Header" ; return HEADER;}
     
    "=Usage="		{SV = "Usage" ; return (USAGE);}
     
    "=Structure="		{SV = "Structure" ; return (STRUCTURE);} 
    "=Element="		{SV = "Element" ; return (ELEMENT);}
     
     
    "$"			return (Paragraphe);
     
    "*"			return (Etoile);
     
    "**"			return (SousEtoile);
    "(?) { ;"		return (LigneVide);
     
    "§   Name:"		{Var = "Name"; return (NAME);}
    "§   Document:"		{Var = "Document"; return (DOCUMENT);}
    "§   Direction:"	{Var = "Direction"; return (DIRECTION);}
    "§   Authors:"		{Var = "Authors"; return (AUTHORS);}
    "§   Summary:"		{Var = "Summary"; return (SUMMARY);}
    "§   Version:"		{Var = "Version"; return (VERSION);}
     
    "§"			return TEST1;
     
     
    %%

    Yacc :
    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
     
    %{
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int i;
     
    int si;
    int a;
     
    i=1;
    si=1;
    a=0;
     
    %}
     
    %token HEADER
     
    %token STRUCTURE
     
    %token USAGE
    %token ELEMENT
     
    %token Etoile
     
    %token Paragraphe
     
    %token SousEtoile
    %token LigneVide
     
    %token NAME
    %token DOCUMENT
    %token DIRECTION
    %token AUTHORS
    %token SUMMARY
    %token VERSION
     
    %token TEST1 
     
    %%
     
    ALO :
     
    	 HEADER 	{printf("<Header>");}
     
    	| STRUCTURE 	{printf("<Structure>");}
     
    	| USAGE 	{printf("<Usage>");}
    	| ELEMENT	{printf("<Element>");}
    	| NAME		{printf("<Name><![CDATA["); a=1;}
    	| DOCUMENT	{printf("<Document><![CDATA["); a=1;}
    	| DIRECTION	{printf("<Direction><![CDATA["); a=1;}
    	| AUTHORS	{printf("<Authors><![CDATA["); a=1;}
    	| SUMMARY	{printf("<Summary><![CDATA["); a=1;}
    	| VERSION	{printf("<Version><![CDATA["); a=1;}
     
    	| LigneVide 	{if(a==1){printf("]]></%s>",Var);} printf("</%s>",SV); i=1; si=1;  a=0;}
     
     
    	| Etoile	{printf("%d-",i); i++; if(i>=2){ si=1;}}
     
    	| SousEtoile	{printf("%d-",si); si++;}
     
    	| TEST1		{if(a=1) {printf("]]></%s>",Var);}}



    Et là il me dit (dans le fichier Lex) que HEADER/STRUCTURE/ELEMENT/USAGE/SousEtoile/Etoile/LigneVide etc... Ne sont pas définie...
    Il me dit exactement : " ‘USAGE’ undeclared (first use in this function)"

    Et ça pour tous mes "return". On a pas à les déclarer il me semble pourtant :o
    Dans mes programmes de test (j'ai réalisé une calculatrice avec un tuto), et j'avais pas déclarer mes variables retournées :-/

    Avez vous une idée ? :-/

    Merci d'avance.

Discussions similaires

  1. aide lex et yacc/flex et bison
    Par wasdaka dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 02/12/2008, 20h24
  2. flex et bison
    Par awabi dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 26/11/2008, 12h51
  3. Pour tous les experts Flex et Bison
    Par sabri_icone dans le forum Linux
    Réponses: 1
    Dernier message: 09/01/2008, 15h26
  4. Interfacer Flex et Bison
    Par minirop dans le forum Flex
    Réponses: 4
    Dernier message: 15/11/2006, 23h14
  5. Flex et Bison avec Visual
    Par kiroukou dans le forum MFC
    Réponses: 16
    Dernier message: 16/05/2006, 14h47

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