(Courriels de diversion: <attente@sous-chef-touche.com> <extenuerais@alliance-excedera.com> <misions@club-indexa.com> <impopulaire@reflechisse-entachant.com> <cautionnerez@reecrivait-monteront.com> <passereau@preconisait-tergiversais.com> <ironiseraient@devots-redisions.com> <chercher@renflouerions-insinuons.com> <rivalise@alarmeront-donnaient.com> <assouvisses@electivite-pliures.com> )



Voici un petit example. Pour passer le fichier a lex, il suffit d'affecter
le FILE *yyin defini par lex. Regardes la fonction parse() de config.y  : 

----------------config.y :----------------------------------

%{
  #include <stdio.h>
  /* includes to come here */
 int yyerror (const char *);
 extern FILE *yyin;
%}


%union {
  int val;
  double dval;
  char * name;
  
}


%token ROB_CON
%token SICK_CON
%token LD_MAP
%token ROB_VAR
%token SICK_VAR
%token IDEN
%token NUM
%token REAL


%start load_options
%%

load_options : /*nothing or ...*/
| load_options connect_robot
| load_options load_map
;
/* connecting to the robot . syntax : CONNECT_ROBOT robot_name port_number robot_id */ 
connect_robot : ROB_CON IDEN NUM NUM {ConnectServer2Robot($<name>2,$<val>3,$<val>4);  } 
| connect_robot set_robot_variance 
| connect_robot connect_sick 
; 

/* 
   sets the parameters for robot moving error in this order (3 doubles) :
   - percentage of translation error 
   - percentage of rotation error
   - number of degrees of ortientation error by meter travelled
*/

set_robot_variance : ROB_VAR REAL REAL REAL {SetAccuracyMove($<dval>2, $<dval>3,$<dval>4);} 

/*connecting to the sick on indicated port */
connect_sick : SICK_CON IDEN {SetSickComPort($<name>2); InitSick();};

load_map : LD_MAP IDEN {ReadMapFile ($<name>2);} 
%%

int parseConfigFile(char * conf_file)
{
  if(!(yyin = fopen(conf_file,"r")))
    return 1;
  
  if (yyparse()){
    fclose(yyin);
    return 1;
  }
  
  fclose (yyin);
  return 0;
  
}

int yyerror (const char *s)
{

  printf("%s\n",s);

}



-----------------config.lex -----------------------------

%{
#include "config.h"
  



%}

%x comment
REAL ([0-9]*\.[0-9]+)
NBR  ([0-9]+)
ID  [a-zA-Z_/]+[@:.a-zA-Z0-9_/]*[^ \n]*
STRING "\"".*"\""
%%


ConnectRobot return ROB_CON;
ConnectSick return SICK_CON;
LoadMapFile return LD_MAP;
SetRobotDrift return ROB_VAR;
SetSickAccuracy return SICK_VAR;

{ID} { yylval.name = strtok(yytext," ");   return IDEN;}
{REAL} {yylval.dval = atof(yytext);   return REAL;}
{NBR} {yylval.val = atoi(yytext);   return NUM;}


.|\n 

%%

#ifndef WIN32
int yywrap()
{
  return 1;

}
#endif


-------------------------------










Lionel GACHES <lgaches@oci.fr> writes:
> bonjour a tous
> 
> je recherche des informations pour pouvoir interpréter un fichier de
> configuration (avec flex et bison).
> si quelqu'un a de la doc sur ce type d'utilisation ou a un exemple
> simple je suis preneur.
> 
> une autre petite question:
>     comment bison peut dire a flex d'utiliser un fichier en entré pour
> son analyse.
> 
> Merci
> Lionel Gaches
> lgaches@oci.fr> 
> 
> 
>  _______________________________________________________________________
>   Le CULTe sur le ouebe: http://savage.iut-blagnac.fr/

 _______________________________________________________________________
  Le CULTe sur le ouebe: http://savage.iut-blagnac.fr/