[yacc] problème de structure

problème de structure [yacc] - Divers - Programmation

Marsh Posté le 14-01-2005 à 12:05:23    

Je rencontre un problème de structure dans l'union de mon fichier .y, je n'arrive pas à localiser l'erreur. Avez vous une idée de ce qu'il se passe  :??:  
 
La sortie d'erreur:
 

Code :
  1. $ make
  2. gcc -c y.tab.c
  3. essai.y:3: erreur: erreur de syntaxe avant une chaîne constante
  4. essai.y:11: erreur: erreur de syntaxe avant « TNode »
  5. essai.y:11: attention : pas de point virgule à la fin de la structure ou de l'union
  6. essai.y:12: attention : la définition de données n'a pas de type ni de classe de stockage
  7. y.tab.c:150: erreur: erreur de syntaxe avant un élément lexical « * »
  8. y.tab.c:150: attention : la définition de données n'a pas de type ni de classe de stockage
  9. y.tab.c:151: erreur: erreur de syntaxe avant « yyval »
  10. y.tab.c:151: attention : la définition de données n'a pas de type ni de classe de stockage
  11. y.tab.c:152: erreur: erreur de syntaxe avant « yylval »
  12. y.tab.c:152: attention : la définition de données n'a pas de type ni de classe de stockage
  13. y.tab.c:155: erreur: erreur de syntaxe avant un élément lexical « * »
  14. y.tab.c:155: attention : la définition de données n'a pas de type ni de classe de stockage
  15. y.tab.c: In function `yygrowstack':
  16. y.tab.c:169: erreur: « newvs » non déclaré (première utilisation dans cette fonction)
  17. y.tab.c:169: erreur: (Chaque identificateur non déclaré est rapporté une seule fois
  18. y.tab.c:169: erreur: pour chaque fonction dans laquelle il apparaît.)
  19. y.tab.c:184: erreur: erreur de syntaxe avant un élément lexical « ) »
  20. make: *** [y.tab.o] Erreur 1


 
Le fichier yacc:
 

Code :
  1. %{
  2.    #include <stdio.h>
  3.    #include "liste.h"
  4.    int yylex();
  5.    int yyparse();
  6.    void yyerror(char*);
  7.    TNode l;
  8.    TNode l2;
  9.    float vbltable[26];
  10.    Liste *listSymbol;
  11. %}
  12. %union
  13. {
  14.   float reel;
  15.   TNode liste;
  16.   int var;
  17.   char* chaine;
  18. }
  19. %token <var> NAME
  20. %token <reel> REEL
  21. %token <chaine> CMD VAR
  22. %type <reel> expression
  23. %type <liste> LL L L2 A E
  24. %left ':='
  25. %left '-' '+'
  26. %left '*' '/'
  27. %nonassoc UMINUS
  28. %%
  29. statement: NAME ':=' expression {vbltable[$1]=$3;}
  30. |         expression           {printf("=%g\n",$1);}
  31. |         VAR ':=' LL          {
  32.    listSymbol=(Liste*)malloc(sizeof(Liste));
  33.    listSymbol->liste=&$3;
  34.    listSymbol->nom=$1;
  35.    }
  36. |         LL                   {DisplayListe(&$1);}
  37. |   L'\n'         {l2=*(create());}
  38. ;
  39. LL : L '::' L      {
  40.                    Concatene(&$1,&$3);
  41.                    }
  42. | '+' L            {
  43.                    addListe(l,$2);
  44.                    }
  45. | '+' expression   {
  46.                    addItem(&l,$2);
  47.                    }
  48. | '--' L           {
  49.                    coupeTete(&l);
  50.                    }
  51. | VAR              {listSymbol->liste=&$$;}
  52. | CMD              {
  53.                    retrouveItem(0,decoupeString(0,$1),&$$,$1);
  54.                    }
  55. ;
  56. L : '(' L2 {
  57.  printf("bonjour\n" );
  58.  l2=l;
  59.  printf("coucou\n" );
  60.  l=*(create());
  61.  }
  62. | E  {}
  63. ;
  64. L2 : expression A {printf("bonjour2\n" );addItem(&l,$1);printf("bonjour3\n" );}
  65. | expression')'  {printf("bonjour4\n" );addItem(&l,$1);printf("bonjour6\n" );}
  66. | L ')'   {
  67.    addListe(l2,l);
  68.    l=l2;
  69.    }
  70. | L A   {
  71.    addListe(l2,l);
  72.    l=l2;
  73.   }
  74. ;
  75. A : ',' L2  {}
  76. ;
  77. E : '('')'  {}
  78. ;
  79. expression: expression '+' expression {$$=$1+$3;}
  80. |           expression '-' expression {$$=$1-$3;}
  81. |           expression '*' expression {$$=$1*$3;}
  82. |           expression '/' expression
  83.                                       {
  84.                                         if($3==0.0)
  85.                                            yyerror("divide by zero" );
  86.                                         else
  87.                                            $$=$1/$3;
  88.                                       }
  89. |          '-' expression %prec UMINUS {$$=-$2;}
  90. |          '{' expression '}'          {$$=$2;}
  91. |           NAME                       {$$=vbltable[$1];}
  92. |           REEL
  93. ;
  94. %%
  95. main(){
  96.   printf(">> " );
  97.   yyparse();
  98. }


 
Le fichier .h:
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define MAX 255
  5. typedef struct tnode
  6. {
  7.   int valeur[MAX];
  8.   int boolean[MAX];
  9.   struct tnode *listfils[MAX];
  10.   struct tnode *forward;
  11.   int taille;
  12. }TNode;
  13. typedef struct T_Cell
  14. {
  15.   char *nom;
  16.   TNode *liste;
  17.   struct T_Cell *suivant;
  18. }DLList;
  19. typedef DLList Liste;
  20. TNode* create();
  21. void addItem(TNode *liste,float nb);
  22. void Display(TNode *current);
  23. void DisplayListe(TNode *current);
  24. void Concatene(TNode *liste1,TNode *liste2);
  25. int decoupeString(int rg,char* cmd);
  26. int lenght(int tab[]);
  27. int retrouveItem(int i,int numero,TNode *liste,char* cmd);
  28. TNode addHead2(TNode *liste,int element);
  29. TNode addHead1(TNode *liste1,TNode *liste2);
  30. TNode coupeTete(TNode *liste);


 
 
 
http://membres.lycos.fr/lexetyacc/compil/Makefile
 
http://membres.lycos.fr/lexetyacc/compil/liste.c
 
http://membres.lycos.fr/lexetyacc/compil/liste.h
 
http://membres.lycos.fr/lexetyacc/compil/save.l
 
http://membres.lycos.fr/lexetyacc/compil/seule.y


Message édité par nodus le 14-01-2005 à 12:07:48

---------------
Et toi, tu crois que les ours polaires vont chier dans les bois ?
Reply

Marsh Posté le 14-01-2005 à 12:05:23   

Reply

Marsh Posté le 14-01-2005 à 15:16:07    

Apparament si je change ça:
 

Code :
  1. %union
  2. {
  3.    float reel;
  4.    TNode liste;
  5.    int var;
  6.    char* chaine;
  7. }


 
en ça:
 

Code :
  1. %union
  2. {
  3.    float reel;
  4.    struct TNode liste;
  5.    int var;
  6.    char* chaine;
  7. }


 
j'obtiens:
 

Code :
  1. $ make
  2. yacc -d seule.y
  3. gcc -c y.tab.c
  4. seule.y:19: field `list' has incomplete type
  5. make: *** [y.tab.o] erreur 1


 
Mais là pour trouver l'erreur  :??: , je sèche...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed