Le fichier des directives de simulation


index{fichier des directives de simulation} Ce fichier est lu (et son contenu exploité) par un appel à la fonction ParseDirectiveFile. Cette fonction prend en argument le nom physique du fichier. Cet appel ne peut figurer que dans le programme principal.
int main(int argc,  char* argv[]) {
  ...
  ParseParameterFile(argv[1]);
  ParseSimulationFile(argv[2]);
  ...
  ParseDirectiveFile(argv[5]);
  //pCurrentSim->Run();
  ...
}

Le nom du fichier peut figurer dans l'instruction (et donc compilé) ou, plus généralement, être passé en argument de la ligne de commande :

./main  sim1.par  sim1.sim  sim1.osp  sim1.str  sim1.dir

Dans le programme principal, l'appel à ParseDirectiveFile doit figurer après l'appel à ParseParameterFile si une directive (notamment celle qui lance l'éxécution par Run) requiert que des paramètres du système soient déjà connus en mémoire (donc accessibles par Get..ParameterValue).

De même, il doit figurer après l'appel à ParseSimulationFile si est déclarée une directive d'éxécution (par Run), laquelle requiert l'instanciation préalable d'une instance de Simulation.

Le fichier des directives de simulation est une suite de phrases, dont la syntaxe est la suivante :

<fichier>         ::= <phrase>*
<phrase>          ::= <ligne_trace> | <ligne_chrono> | <ligne_message> |
                      <parse_param> | <parse_os>     | <parse_struct>  | 
                      <init_rand>   | <init_simu>    | <run_simu>      |   
                      <recup_mem>   | <display_os>   | <report_mem>    |
                      <ligne_exit>

<ligne_trace>     ::= TRACE <mode_trace> <fin>
<mode_trace>      ::= PARSING | NO_PARSING | ACTION | NEWDEL

<ligne_chrono>    ::= CHRONO <instr_chrono> <fin> |
                      CHRONO DISPLAY [<message>] <fin>
<instr_chrono>    ::= INIT | START | PAUSE | CLOSE 
<message>         ::= <submessage>*
<submessage>      ::= <chaine> | <multichaine> | <format> | ENDL | TAB | CLOCK
<chaine>          ::= [a-zA-Z][a-zA-Z0-9\_\.]*
<multichaine>     ::= "<chaine_m>"
<chaine_m>        ::= [a-zA-Z(\ )*][a-zA-Z0-9\_\.\ ]*
<format>          ::= "<chaine_f>"
<chaine_f>        ::= [a-zA-Z0-9\+\*\/\,\_\.\:\!\?\%\'\"\ \=\\]*

<ligne_message>   ::= MESSAGE <message> <fin> 

<parse_param>     ::= LECTURE PARAMETRE dir_path <fin>
<dir_path>        ::= "[/]<etage>*"
<etage>           ::= <chaine>/ | ../
<chaine>          ::= [a-zA-Z][a-zA-Z0-9\_\.]* 

<parse_os>        ::= LECTURE OUTPUTSPEC dir_path <fin>

<parse_struct>    ::= LECTURE STRUCTURE dir_path <fin>

<init_rand>       ::= INITRAND <entier> <fin> |
                      INITRAND <fin>  

<init_simu>       ::= INIT SIMULATION dir_path <fin> 

<run_simu>        ::= RUN [<entier>] <fin>

<recup_mem>       ::= DELETE <spec_recup> <fin>
<spec_recup>      ::= <spec_recup_entite> | 
                      MONITOR | PARAMETER | OUTPUTSPEC | FICHIER | SIMULATION | 
                      ALL
<spec_recup_ent>  ::= ENTITE [<nom_classe>] INSTANCE |
                      ENTITE [<nom_classe>] CLASSE 
<nomclasse>       ::= <chaine> | <multichaine>

<display_os>      ::= DISPLAY OUTPUTSPEC <spec_display_os> <fin>
<spec_display_os> ::= <spec_dspl_ent> | 
                      PROCESS | CPROCESS | DPROCESS | EVENT 
<spec_dspl_ent>   ::= ENTITE [<nom_classe>]

<report_mem>      ::= RAPPORT MEMOIRE <fin> 

<ligne_exit>      ::= EXIT <fin> 

<fin>             ::= ;

Un exemple de fichier de directives est le suivant :

TRACE PARSING;
//TRACE NEWDEL;
//TRACE ACTION;

CHRONO INIT;
CHRONO START;

LECTURE PARAMETRE "parametres";
INIT SIMULATION "initSim";
LECTURE STRUCTURE "structure";
LECTURE OUTPUTSPEC "outspec.std";

RUN 1000;

MESSAGE ENDL + "temps simule = " + HORLOGE + ENDL;
CHRONO DISPLAY ENDL + "duree de la simulation = "; MESSAGE ENDL;
   
DISPLAY OUTPUTSPEC EVENT;
DISPLAY OUTPUTSPEC DPROCESS;
DISPLAY OUTPUTSPEC CPROCESS;
DISPLAY OUTPUTSPEC ENTITE entity;
MESSAGE ENDL + "fin sauvegarde des sorties" + ENDL;

DELETE PARAMETRE;  
DELETE OUTPUTSPEC; 
DELETE ENTITE INSTANCE;
DELETE MONITOR;
DELETE SIMULATION;
RAPPORT MEMOIRE;
DELETE ENTITE CLASSE;
MESSAGE ENDL + "fin nettoyage" + ENDL;
CHRONO CLOSE;

Noter que le nom de classe entity est celui de la classe de base Entity. On demande alors la sauvegarde d'informations pour toutes les classes d'entités


This page was generated with the help of DOC++.