FLEX /LEX BISON/YACC

Résolu
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011 - 16 nov. 2009 à 12:09
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 13 mars 2010 à 11:20
JE CHERCHE A COMMENC2 AVEC CES DEUX LOGICIEL FLEX ET BISON POUR GENERER DEUX ANALYSEUR , L'OUTIL FLEX APPARAIT EN PROMPTEUR DOS MAIS JE NE SAIS PAS QUOI Y ECRIRE NI COMMENT EXECUT2 OU VERIFIE OU MEME RECUPERER MON ANALYSEUR APRES AVOIR FINIS , POUR BISON LE PROMPTEUR APPARAIT ET DISPARRAIT TOUT SUITE PAS MOYEN DE TRAVAILLER DESSUS ,.. MON PROBLEME N4EST PAS LA SYNTAXE DES LOGICIEL J4AI LA DOCUMENTATION ET SUR PAPIER JE COMENCE A TRAVAILLER ? MON PROBLEME C4EST LA MANIPULATION ET L4EXECUTION LA VERIFICATION ET L'ENREGISTREMENT . JE VOUDRAI AVOIR LES ETAPES A SUIVRE POUR AVOIR MES ANALYSEUR ? PUIS COMMENT LES INTEGRE A UN IDE POUR FAIRE UN LOGICIEL DE TRADUCTION , MERCI A TOUS
A voir également:

96 réponses

alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
16 déc. 2009 à 19:12
j'essaye avec ca .
letre [a-z]
%%
{letre}* printf("lettre");
%%

un exemple tout simple qui ne fait absolument rien que reconnaitre les entité lettre , apres génération de code je fait gcc -c lex.yy.c
puis ca marche et j'obtient le lex.yy.o ,un fichier compiler mais sans linkage alors la je stop ....
puis ton projet me par& tres bien organisé je voudrais comprendre pourquoi (.ll) et pourquoi (.hh) et aussi comment faire le compile.sh et se que c'est (.sh) c'est trop de question je sais mais ca m'aiderai beaucoup d'avoir grossomodo les etapes a suivre pour faire un travail net comme le tien , sinon quoi soivoir pour y arrivé , parceque j'ai un projet , je doit faire un traducteur d'un language algorithmique que j'ai spécifié au language C , ca sera un programme muet su style de flex , un tres grand merci .
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
16 déc. 2009 à 20:01
Salut,
Ok je vois que tu as installé Cygwin. Totalement inutile, un travail 100% sous Windows est mieux (ça peut paraître étrange, mais il m'est arrivé que mes générations de code par flex fonctionnent différemment sous Linux et Windows, donnant un résultat bien différent).

Ne connais-tu pas GnuWin32 ? Pour récupérer tes outils flex/bison, tu les trouves ici
En regardant les version des outils que j'ai utilisé, j'obtiens :
flex version 2.5.2
GNU Bison version v1.28 for Win32
Si mes souvenirs sont bons, dans le package téléchargé, j'ai également eu les fichier bison.simple et bison.hairy (je ne sais plus s'ils sont utiles).
Une fois tout ça, il faut se préparer de petits outils pour éviter de galérer et automatiser au max tes procédures (tu verras générer le code par flex, puis bison, puis compiler ton projet final, etc, au bout de 10 fois de suite, ça devient très chiant).
Je me suis donc fait plusieurs fichiers de commandes (*.bat)

Un premier fichier (run_cmd.bat) qui permet d'ouvrir une fenêtre console au répertoire courant
cmd


Un autre fichier (compile_yacc.bat) qui permet de générer le code C par flex et bison
@echo off
flex wkl.l
bison --debug -y -d wkl.y
pause


et plusieurs autres dont je ne me souviens plus très bien l'utilité...

Bref, une fois ça, je modifiais simplement mes fichiers flex et bison, puis en double-cliquant sur compile_yacc.bat, il générait le code, le "pause" nous permet de vérifier qu'il n'y a pas d'erreur.

Ensuite, pour le code même de flex, voici un site parmis tant d'autres qui explique le protocole, à sa manière (format pdf) ici.

Je suis désolé, j'ai l'impression de répondre un peu à côté de la plaque, mais je n'ai pas beaucoup de temps, là.


Cordialement, uaip.
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
16 déc. 2009 à 20:25
ta reponse est tres interessante surtout ton expreianceme disant qu'il peut y avoir des comprtement diferents sous windows et linux m'est utile , mais pour le moment je reste sur l'essai , je sur la phase numero 1 du projet qui dit : essaie de fonctionament des outils flex et bison sous les deux environement windows et linux . pour le moment je ne peux allé plus loin si ca ne marche pas encore ...
merci beaucoup
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
17 déc. 2009 à 17:14
@uaip: Merci pour cette précision, et pour le lien très pratique. Effectivement, comme discuté précédemment, même si il est plus adapté de faire ceci sous Linux, le portage sous Windows est tout à fait honorable. Nous avons essayé de le faire fonctionner ensemble, mais il s'est avéré que alxidali a rencontré beaucoup de problèmes. Il a résolu ceux-ci en installant un Linux. Ce n'est peut être pas la meilleur solution (installer un Linux pour cela c'est un peu lourd) mais ça a le mérite de fonctionner !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
17 déc. 2009 à 17:51
nn nn , petite precision , ca marche sous linux et sous windows , et ca a marché sous windows avec devc++ , j'ai créé un fichier et comme je l'ai dit , j'ai installé linux en paralléle .merci a vous deux
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
17 déc. 2009 à 18:41
Evidemment, ça fonctionne sous Linux et Windows (c'est bien le but de GnuWin32).
Quand je disais que certains résultats étaient bien différents sous Linux et Windows, c'était sur un projet de grande envergure (création d'un langage compilable), donc très complexe. C'est dans cette complexité là sans doute que les résultats différent selon l'OS (gestion de la mémoire ? des données ? je ne sais pas).


Cordialement, uaip.
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
18 déc. 2009 à 12:13
je voudrais que vous m'eclairiez sur les etapes a suivre apres avoir généré mon .c avec flex et générer mes deux fichier avec bison , comment faire pour lier tout cela est avoir un analyseur syntaxique pré a l'usage , je suis entrain pour les vacances de fin d'anné de faire un mini compilateur c, pour m'ahabituer a bien travailler sous ces deux log , si vous pouvez donnez moi les etapes quoi faire apres avoir créer les 3 fichiers . merci beaucoup .
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
23 déc. 2009 à 22:07
me revoila , salut a tout le monde .
toujours des problemes ca n'en fini pas lol , en tout cas merci d'etre la pour moi .
mon probleme est le suivant , comment faire des return pour mes entité reconnu pour qu'apres sous bison je puisse faire le célébre %token .
j'ai vu que sur le fichier de CptPingu il était unpeu flou et surtout fait avec des classes alors que mon prof m'interdit de faire ca avec des classe

voici l'exemple plus clair

chifre [0-9]
lettre [a-zA-z]
%%
{chiffre} (.....???....) problem ici comment retourner ces entité pour qu'elle soit reconnu avec bison
{lettre} (.....??????)
%%
..

merci .
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 déc. 2009 à 22:17
j'ai vu que sur le fichier de CptPingu il était unpeu flou et surtout fait avec des classes alors que mon prof m'interdit de faire ca avec des classe

Quel intérêt de faire du C++ si ce n'est pour exploiter les classes ?
De plus, je n'utilise pas de classe pour faire cette liaison, mais des types.

Dans le fichier .ll, grâce au typedef ::yy::parser::token token;, tu vas pouvoir écrire: return token::TAREGLE.

Si tu as dans ton fichier .yy, la déclaration: %token TAREGLE "taregle", alors, les deux seront liés.

Exemple:
.ll
FALSE		"false"
TRUE		"true"

%%
{FALSE}		{ return token::FALSE; }
{TRUE}		{ return token::TRUE; }
%%

.yy
%token TRUE "true"
%token FALSE "false"

// Je ne met pas tout le code, que je t'ai déjà envoyé
     TRUE    { std::cout << "true déclenché" << std::endl }
   | FALSE   { std::cout << "false déclenché" << std::endl }
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
23 déc. 2009 à 22:33
la tu devras me faire un petit cours si ca ne te dérrange pas , parceque je ne saisi pas vraiment le typedef a l'interieur du flex ...
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
23 déc. 2009 à 22:34
Salut

Fichier flex :
pouet { puts("Element pouet"); return POUET; }
bidule { puts("Element bidule"); return BIDULE; }


Fichier bison :
%token POUET
%token BISON


On notera que je n'adopte pas la même syntaxe que CptPingu. A toi de choisir (ce que tu préfères et/ou ce qui fonctionne).

Tu peux aussi utiliser l'union prévue par flex.

Fichier bison :
%union {
int entier;
float decimal;
char *chaine;
}
%token <chaine> POUET
%token <entier> BISON

De cette manière, tu pourras typer des règles contenant POUET ou BISON.

On peut apporter beaucoup plus de précisions, mais j'ai l'intuition que l'exemple fourni par CptPingu est riche et complet.

Quel intérêt de faire du C++ si ce n'est pour exploiter les classes ?

Désolé si je me trompe, mais je n'ai pas le souvenir d'avoir lu que le projet était en C++, de plus nous sommes dans une catégorie C du forum

Cordialement, uaip.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 déc. 2009 à 23:42
Désolé si je me trompe, mais je n'ai pas le souvenir d'avoir lu que le projet était en C++

A la page 1, il a sous entendu, que le langage semblait être à la discrétion de l'étudiant (Je cite: "c ou c++"), et n'a pas infirmé cela, tout simplement :)

de plus nous sommes dans une catégorie C du forum

Les débutants font mal la distinction entre C et C++, donc j'ai appris à ne pas m'y fier :p

Uaip met le doigt sur quelque chose de pertinent, ça me fait penser qu'il y a une différence entre coder en C++ sans utiliser les objets et coder en C.
Si depuis le début, tu devais le faire en C, alors oublie ce que je t'ai dit, puisque mes exemples ne fonctionneront qu'avec du C++.
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
23 déc. 2009 à 23:50
merci .
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
24 déc. 2009 à 12:04
Salut,
En effet, alxidali n'a jamais contredit lorsque tu parlais du C++, et vu que je n'ai pas lu la totalité des échanges du topic, je peux me tromper.
En fait, ce serait à lui de nous dire précisément quel langage il utilise, au lieu d'un simple "merci"


Cordialement, uaip.
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
24 déc. 2009 à 15:30
merci de me porter votre attention et de m'aider .


ce serait à lui de nous dire précisément quel langage il utilise


mon professeur me demande d'utiliser du c , car je ne suis pas encore supposé connaitre le c++ je suis en 2iéme anné info .

je baigne dans le flou avec bison , j'ai une erreur lors du
" bison -d monfichier.y " il me dit unexcpected %token , et j'ai fait comme uiap me la montré , de plus je ne sais pas comment lié les deux fichiers ni comment finir et généré un analyseur syntaxique fini .quoi déclaré sur flex et quoi déclaré sur bison pour que les deux fichiers se reconaissent .
ca m'aiderai beaucoup si vous m'aidiez , et merci encore .
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
24 déc. 2009 à 16:01
Dans un premier temps, tu peux toujours regarder mon implémentation perso, les deux fichiers flex et bison étant téléchargeables [winky.fr/fb.zip ici (fichier zip)]
Je précise que j'ai pas mal galéré, donc le codage n'est sans doute pas des mieux . Et puis étant donné la grosseur du projet, certaines choses risques de t'embrouiller. Enfin bon.

Après génération de ces fichiers (il faut d'autres fichiers dépendants, non fournis dans le zip), il suffit d'appeler Parse(fichier); pour parser un fichier (c'est pour que tu comprennes le fonctionnement).

SI tu as des questions, n'hésite pas...

Cordialement, uaip.
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
24 déc. 2009 à 17:27
le fichier demandé sur le lien n'existe pas !!!
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
24 déc. 2009 à 17:57
bien merci j'ai reçu les fichier voulu , maintenant ma question c'est comment exécuter tout ca . l'analyseur syntaxique qui en résulte ?
merci bien .
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
24 déc. 2009 à 17:59
Je l'ai expliqué plus haut, il manque plein de fichiers, et on s'en fout. Je t'ai donné ces 2 fichiers pour que tu voies comment les combiner l'un avec l'autre, et comment appeler tout ça de l'extérieur (avec Parse()), puisque c'était ta question.


Cordialement, uaip.
0
alxidali Messages postés 97 Date d'inscription mardi 21 juillet 2009 Statut Membre Dernière intervention 10 octobre 2011
24 déc. 2009 à 18:05
oui je m'explique , vous ne m'avez pas compris !
j'ai 3 fichier :
lex.yy.c ----> généré avec flex
c.tab.c
c.tab.h ---->généré avec bison .

le travail avec les deux générateur est mnt fini , je voudrai lander mon analyseur syntaxique comment faire ?
0
Rejoignez-nous