nodus | 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 :
- $ make
- gcc -c y.tab.c
- essai.y:3: erreur: erreur de syntaxe avant une chaîne constante
- essai.y:11: erreur: erreur de syntaxe avant « TNode »
- essai.y:11: attention : pas de point virgule à la fin de la structure ou de l'union
- essai.y:12: attention : la définition de données n'a pas de type ni de classe de stockage
- y.tab.c:150: erreur: erreur de syntaxe avant un élément lexical « * »
- y.tab.c:150: attention : la définition de données n'a pas de type ni de classe de stockage
- y.tab.c:151: erreur: erreur de syntaxe avant « yyval »
- y.tab.c:151: attention : la définition de données n'a pas de type ni de classe de stockage
- y.tab.c:152: erreur: erreur de syntaxe avant « yylval »
- y.tab.c:152: attention : la définition de données n'a pas de type ni de classe de stockage
- y.tab.c:155: erreur: erreur de syntaxe avant un élément lexical « * »
- y.tab.c:155: attention : la définition de données n'a pas de type ni de classe de stockage
- y.tab.c: In function `yygrowstack':
- y.tab.c:169: erreur: « newvs » non déclaré (première utilisation dans cette fonction)
- y.tab.c:169: erreur: (Chaque identificateur non déclaré est rapporté une seule fois
- y.tab.c:169: erreur: pour chaque fonction dans laquelle il apparaît.)
- y.tab.c:184: erreur: erreur de syntaxe avant un élément lexical « ) »
- make: *** [y.tab.o] Erreur 1
|
Le fichier yacc:
Code :
- %{
- #include <stdio.h>
- #include "liste.h"
- int yylex();
- int yyparse();
- void yyerror(char*);
- TNode l;
- TNode l2;
- float vbltable[26];
- Liste *listSymbol;
- %}
- %union
- {
- float reel;
- TNode liste;
- int var;
- char* chaine;
- }
- %token <var> NAME
- %token <reel> REEL
- %token <chaine> CMD VAR
- %type <reel> expression
- %type <liste> LL L L2 A E
- %left ':='
- %left '-' '+'
- %left '*' '/'
- %nonassoc UMINUS
- %%
- statement: NAME ':=' expression {vbltable[$1]=$3;}
- | expression {printf("=%g\n",$1);}
- | VAR ':=' LL {
- listSymbol=(Liste*)malloc(sizeof(Liste));
- listSymbol->liste=&$3;
- listSymbol->nom=$1;
- }
- | LL {DisplayListe(&$1);}
- | L'\n' {l2=*(create());}
- ;
- LL : L '::' L {
- Concatene(&$1,&$3);
- }
- | '+' L {
- addListe(l,$2);
- }
- | '+' expression {
- addItem(&l,$2);
- }
- | '--' L {
- coupeTete(&l);
- }
- | VAR {listSymbol->liste=&$$;}
- | CMD {
- retrouveItem(0,decoupeString(0,$1),&$$,$1);
- }
- ;
- L : '(' L2 {
- printf("bonjour\n" );
- l2=l;
- printf("coucou\n" );
- l=*(create());
- }
- | E {}
- ;
- L2 : expression A {printf("bonjour2\n" );addItem(&l,$1);printf("bonjour3\n" );}
- | expression')' {printf("bonjour4\n" );addItem(&l,$1);printf("bonjour6\n" );}
- | L ')' {
- addListe(l2,l);
- l=l2;
- }
- | L A {
- addListe(l2,l);
- l=l2;
- }
- ;
- A : ',' L2 {}
- ;
- E : '('')' {}
- ;
- expression: expression '+' expression {$$=$1+$3;}
- | expression '-' expression {$$=$1-$3;}
- | expression '*' expression {$$=$1*$3;}
- | expression '/' expression
- {
- if($3==0.0)
- yyerror("divide by zero" );
- else
- $$=$1/$3;
- }
- | '-' expression %prec UMINUS {$$=-$2;}
- | '{' expression '}' {$$=$2;}
- | NAME {$$=vbltable[$1];}
- | REEL
- ;
- %%
- main(){
- printf(">> " );
- yyparse();
- }
|
Le fichier .h:
Code :
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define MAX 255
- typedef struct tnode
- {
- int valeur[MAX];
- int boolean[MAX];
- struct tnode *listfils[MAX];
- struct tnode *forward;
- int taille;
- }TNode;
- typedef struct T_Cell
- {
- char *nom;
- TNode *liste;
- struct T_Cell *suivant;
- }DLList;
- typedef DLList Liste;
- TNode* create();
- void addItem(TNode *liste,float nb);
- void Display(TNode *current);
- void DisplayListe(TNode *current);
- void Concatene(TNode *liste1,TNode *liste2);
- int decoupeString(int rg,char* cmd);
- int lenght(int tab[]);
- int retrouveItem(int i,int numero,TNode *liste,char* cmd);
- TNode addHead2(TNode *liste,int element);
- TNode addHead1(TNode *liste1,TNode *liste2);
- 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 ?
|