Forum Programmation.c++ Lex Yacc : comment utiliser le parser de maniere dynamique ?

Posté par  .
Étiquettes : aucune
0
26
avr.
2005
Bonjour,

Malgré des heures de recherches sur Internet, je n'arrive pas à trouver la solution à mon probleme.

Je vous explique :

J'ai une classe MyInteger


class MyInteger
{
public:
int value;

inline MyInteger(int val) {value = val; } ;
}


Je voudrais me faire une classe "MyParser" (générée par Lex/Yacc) qui pourrait parser une chaine (char*), et me retourner un [b]pointeur[/b] de MyInteger (où le contenu serait la valeur en entrée).


En gros, je voudrais avoir une classe à moi qui contienne un main :



#include "les_fichiers_generes_par_lex_yacc"

int main(int argc, char** argv)
{
MyInteger* myInt;

char* input = "1"; // la chaine que je veux parser
MyParser parser;

myInt = parser.construire_un_objet_myinteger(input);
}


Si mon "input" vaut "1", je veux que le code généré par Lex/Yacc me retourne un "new MyInteger(1);".

Ce qui me pose probleme c'est :
- comment faire en sorte que Yacc prenne un "char*" en entrée, et pas l'entrée standard ni un fichier ?
- comment faire en sorte que le "main" de mon appli ne soit pas dans le fichier généré par Yacc ?
- comment construire la fonction "construire_un_objet_myinteger" ?
- comment faire en sorte que Yacc puisse créer un objet de type "MyInteger" ?



(quand je dis "Lex/Yacc", ca peut etre "Flex/Bison")

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.