Calculette Lex + Yacc | probleme avec des strutures | oK - C - Programmation
Marsh Posté le 02-11-2003 à 18:25:49
nope, yacc ne fait AUCUNE verif de ton code C, il se contente de le recopier betement.
Par contre tu utilises $1, ce qui signifie que tu dois expliciter ce que retourne tes non-terminaux
tu le fais via :
%type<Cm> expression
Je sais pas si les structs dans les %union sont tres appréciés, aussi. (a toi de voir)
Marsh Posté le 02-11-2003 à 18:29:57
Sinon perso je suis pas fan de mettre des types sur les terminaux, je prefere faire un non terminal pour ca
eg :
expression : expression '+' expression1
...
;
expression1 : number
;
number : NUMBER
;
Marsh Posté le 02-11-2003 à 18:32:17
je suis d'accord mais cela fait une grammaire difficile
le union ca a pas l'air de bien marcher
de toute facon meme le lex est faux, il me dit que je peut pas retourner le type Cm
je sais vraiment pas ce qu'il faut faire
Marsh Posté le 02-11-2003 à 18:37:22
ok
bash-2.03$ lex ex2.l
bash-2.03$ gcc lex.yy.c -o ex4 -lfl
In file included from lex.yy.c:84:
y.tab.h:7: field `Cm' has incomplete type
Marsh Posté le 02-11-2003 à 18:39:59
le C, c'est loin, mais je crois que c'est comme ca que ca plait a un compilo C;
typedef struct Complex{
int reel;
int img;
}Complex;
Marsh Posté le 02-11-2003 à 18:41:35
le c est bon ca vient de lex avec les return
j'avais fait cela au debut et ca marchait
Code :
|
Marsh Posté le 02-11-2003 à 18:46:35
maintenant ca marche plus :
bash-2.03$ gcc lex.yy.c -o ex4 -lfl
In file included from lex.yy.c:83:
y.tab.h:7: field `Cm' has incomplete type
pourtant j'ai bien un executable qui marche
Marsh Posté le 02-11-2003 à 19:18:46
j'ai essayer ca
Code :
|
ilo me dit cela comme erreur
bash-2.03$ yacc ex5.y
"ex5.y", line 20: fatal: must specify type for expression
Marsh Posté le 02-11-2003 à 20:11:43
ca ne marche pas il me met cici comme erreur :
bash-2.03$ yacc ex5.y
bash-2.03$ lex ex5.l
bash-2.03$ gcc -o ex5 y.tab.c lex.yy.c -lfl
ex5.l: In function `yylex':
ex5.l:13: union has no member named `Cm'
ex5.l:14: union has no member named `Cm'
Marsh Posté le 02-11-2003 à 21:10:18
hé, attends hein ? Melange pas erreur produites par Yacc et erreur produite par gcc !
Marsh Posté le 03-11-2003 à 12:23:21
Ca marche
merci de ton aide c'etait une erreur de librairie
Marsh Posté le 02-11-2003 à 18:20:45
voila j'essaye de faire une calculette complexe en utilisant Lex et Yacc
voici les codes sources
Code Lex
Le code Yacc
lors de la comilation du code yacc il me donne :
bash-2.03$ yacc -d ex2.y
"ex2.y", line 20: fatal: must specify type for expression
bash-2.03$
ligne : | expression { printf("= %d\n",$1); }
je pense que cela vient de la structure.
il faut caster ???
Merci d'avance
Message édité par Mordock le 03-11-2003 à 13:43:34