Je souhaite utiliser Lex et Yacc pour parser un fichier de configuration.
Mon projet est développé en C++. Savez-vous comment utiliser ces outils
pour les intégrer à mon projet, sans avoir à faire des bidouilles pour
adapter le C au C++ ?
Je souhaite utiliser Lex et Yacc pour parser un fichier de configuration. Mon projet est développé en C++. Savez-vous comment utiliser ces outils pour les intégrer à mon projet, sans avoir à faire des bidouilles pour adapter le C au C++ ?
Salut, Comme l'on dit les autres, je te conseille d'utiliser FLEX et BISON au lieu de lex et Yacc. Pour le C++ tu peux tres bien utiliser les codes C generes par ces deux outils dans un contexte C++. De memoire il te faudra au moins ajouter dans le fichier bison 'extern int yylex();', dans le fichier contenant le main 'extern int yyparse();'. Pour utiliser les iostream avec flex tu peux redefinir la macro YY_INPUT (voir le manuel de flex)
Pierre
Je souhaite utiliser Lex et Yacc pour parser un fichier de configuration.
Mon projet est développé en C++. Savez-vous comment utiliser ces outils
pour les intégrer à mon projet, sans avoir à faire des bidouilles pour
adapter le C au C++ ?
Salut,
Comme l'on dit les autres, je te conseille d'utiliser FLEX et BISON au
lieu de lex et Yacc. Pour le C++ tu peux tres bien utiliser les codes
C generes par ces deux outils dans un contexte C++. De memoire il te
faudra au moins
ajouter dans le fichier bison 'extern int yylex();', dans le fichier
contenant le main 'extern int yyparse();'. Pour utiliser les iostream
avec flex tu peux redefinir la macro YY_INPUT (voir le manuel de flex)
Je souhaite utiliser Lex et Yacc pour parser un fichier de configuration. Mon projet est développé en C++. Savez-vous comment utiliser ces outils pour les intégrer à mon projet, sans avoir à faire des bidouilles pour adapter le C au C++ ?
Salut, Comme l'on dit les autres, je te conseille d'utiliser FLEX et BISON au lieu de lex et Yacc. Pour le C++ tu peux tres bien utiliser les codes C generes par ces deux outils dans un contexte C++. De memoire il te faudra au moins ajouter dans le fichier bison 'extern int yylex();', dans le fichier contenant le main 'extern int yyparse();'. Pour utiliser les iostream avec flex tu peux redefinir la macro YY_INPUT (voir le manuel de flex)
Pierre
Fabien LE LEZ
On 13 Dec 2003 18:06:42 +0100, James Kanze wrote:
|> Flex et Bison on un mode C++. Lex et Yacc je ne sais pas.
Oui, mais au moins avec la version que j'ai, le généré contient une ligne : class istream ; quelque part près du début. Ce qui pose des problèmes si on veut utiliser une bibliothèque un peu récent.
Y'a pas moyen de changer ça assez facilement dans les sources de Flex ?
-- ;-)
On 13 Dec 2003 18:06:42 +0100, James Kanze <kanze@alex.gabi-soft.fr>
wrote:
|> Flex et Bison on un mode C++. Lex et Yacc je ne sais pas.
Oui, mais au moins avec la version que j'ai, le généré contient
une ligne :
class istream ;
quelque part près du début. Ce qui pose des problèmes si on
veut utiliser une bibliothèque un peu récent.
Y'a pas moyen de changer ça assez facilement dans les sources de
Flex ?
|> Flex et Bison on un mode C++. Lex et Yacc je ne sais pas.
Oui, mais au moins avec la version que j'ai, le généré contient une ligne : class istream ; quelque part près du début. Ce qui pose des problèmes si on veut utiliser une bibliothèque un peu récent.
Y'a pas moyen de changer ça assez facilement dans les sources de Flex ?
-- ;-)
kanze
Fabien LE LEZ wrote in message news:...
On 13 Dec 2003 18:06:42 +0100, James Kanze wrote:
|> Flex et Bison on un mode C++. Lex et Yacc je ne sais pas. Oui, mais au moins avec la version que j'ai, le généré contient une ligne : class istream ; quelque part près du début. Ce qui pose des problèmes si on veut utiliser une bibliothèque un peu récent.
Y'a pas moyen de changer ça assez facilement dans les sources de Flex ?
Il y a une option -S pour spécifier la squelette dont il se sert. Selon le manual : « You'll never need this option unless you are doing flex maintenance or development. »
Pour spécifier une squelete, il faut en avoir une. A priori, tu vas la créer en modifiant la version standard. Ce qu'il faut avoir -- la squelette par défaut est integrée dans l'executable lors du build. C'est donc probable que tu n'en as pas accès, au moins que c'est toi qui a installé flex chez vous.
Personellement, je trouve qu'une commande du genre :
flex -t xxx.l | flex2cc
fait très bien l'affaire, où flex2cc est un script simple pour faire des modifications nécessaires. Selon l'état du compilateur, quelque chose comme :
pourrait faire l'affaire. (Le mien est plus complex, parce qu'il convertit en un .cc qui se compile aussi bien avec les flux classiques qu'avec les flux standard.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Fabien LE LEZ <gramster@gramster.com> wrote in message
news:<i6eutv8monl8gn8chrfqjae0ju9a2gvmp0@4ax.com>...
On 13 Dec 2003 18:06:42 +0100, James Kanze <kanze@alex.gabi-soft.fr>
wrote:
|> Flex et Bison on un mode C++. Lex et Yacc je ne sais pas.
Oui, mais au moins avec la version que j'ai, le généré contient une
ligne :
class istream ;
quelque part près du début. Ce qui pose des problèmes si on veut
utiliser une bibliothèque un peu récent.
Y'a pas moyen de changer ça assez facilement dans les sources de
Flex ?
Il y a une option -S pour spécifier la squelette dont il se sert. Selon
le manual : « You'll never need this option unless you are doing flex
maintenance or development. »
Pour spécifier une squelete, il faut en avoir une. A priori, tu vas la
créer en modifiant la version standard. Ce qu'il faut avoir -- la
squelette par défaut est integrée dans l'executable lors du build. C'est
donc probable que tu n'en as pas accès, au moins que c'est toi qui a
installé flex chez vous.
Personellement, je trouve qu'une commande du genre :
flex -t xxx.l | flex2cc
fait très bien l'affaire, où flex2cc est un script simple pour faire des
modifications nécessaires. Selon l'état du compilateur, quelque chose
comme :
pourrait faire l'affaire. (Le mien est plus complex, parce qu'il
convertit en un .cc qui se compile aussi bien avec les flux classiques
qu'avec les flux standard.)
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
|> Flex et Bison on un mode C++. Lex et Yacc je ne sais pas. Oui, mais au moins avec la version que j'ai, le généré contient une ligne : class istream ; quelque part près du début. Ce qui pose des problèmes si on veut utiliser une bibliothèque un peu récent.
Y'a pas moyen de changer ça assez facilement dans les sources de Flex ?
Il y a une option -S pour spécifier la squelette dont il se sert. Selon le manual : « You'll never need this option unless you are doing flex maintenance or development. »
Pour spécifier une squelete, il faut en avoir une. A priori, tu vas la créer en modifiant la version standard. Ce qu'il faut avoir -- la squelette par défaut est integrée dans l'executable lors du build. C'est donc probable que tu n'en as pas accès, au moins que c'est toi qui a installé flex chez vous.
Personellement, je trouve qu'une commande du genre :
flex -t xxx.l | flex2cc
fait très bien l'affaire, où flex2cc est un script simple pour faire des modifications nécessaires. Selon l'état du compilateur, quelque chose comme :
pourrait faire l'affaire. (Le mien est plus complex, parce qu'il convertit en un .cc qui se compile aussi bien avec les flux classiques qu'avec les flux standard.)
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16