71 lines
3.1 KiB
OCaml
71 lines
3.1 KiB
OCaml
|
%{
|
||
|
|
||
|
(* Partie recopiee dans le fichier CaML genere. *)
|
||
|
(* Ouverture de modules exploites dans les actions *)
|
||
|
(* Declarations de types, de constantes, de fonctions, d'exceptions exploites dans les actions *)
|
||
|
|
||
|
%}
|
||
|
|
||
|
/* Declaration des unites lexicales et de leur type si une valeur particuliere leur est associee */
|
||
|
|
||
|
%token UL_MACHINE
|
||
|
%token UL_ACCOUV UL_ACCFER
|
||
|
%token UL_FROM UL_TO UL_ON
|
||
|
%token UL_STARTS UL_ENDS
|
||
|
%token UL_REGION
|
||
|
%token UL_STATE
|
||
|
%token UL_EVENT
|
||
|
%token UL_PT
|
||
|
|
||
|
/* Defini le type des donnees associees a l'unite lexicale */
|
||
|
|
||
|
%token <string> UL_IDENT
|
||
|
|
||
|
/* Unite lexicale particuliere qui represente la fin du fichier */
|
||
|
|
||
|
%token UL_FIN
|
||
|
|
||
|
/* Type renvoye pour le nom terminal document */
|
||
|
%type <unit> machine
|
||
|
|
||
|
/* Le non terminal document est l'axiome */
|
||
|
%start machine
|
||
|
|
||
|
%% /* Regles de productions */
|
||
|
|
||
|
machine : UL_MACHINE UL_IDENT UL_ACCOUV loop_composant UL_ACCFER UL_FIN { (print_endline "machine : MACHINE IDENT ACCOUV loop_composant ACCFER FIN") }
|
||
|
|
||
|
composant : UL_EVENT UL_IDENT { (print_endline "composant : EVENT IDENT") }
|
||
|
| transition { (print_endline "composant : transition") }
|
||
|
| region { (print_endline "composant : region") }
|
||
|
|
||
|
transition : UL_FROM nom_qualifie UL_TO nom_qualifie UL_ON UL_IDENT { (print_endline "transition : FROM nom_qualifie TO nom_qualifie ON IDENT") }
|
||
|
|
||
|
nom_qualifie : UL_IDENT loop_nom_qualfie { (print_endline "nom_qualifie : IDENT loop_nom_qualifie") }
|
||
|
|
||
|
etat : UL_STATE UL_IDENT option_starts option_ends option_regions { (print_endline "etat : STATE IDENT option_starts option_ends option_regions") }
|
||
|
|
||
|
region : UL_REGION UL_IDENT UL_ACCOUV etat loop_etat UL_ACCFER { (print_endline "region : REGION IDENT ACCOUV etat loop_etat ACCFER") }
|
||
|
|
||
|
loop_composant : /* Lambda, mot vide */ { (print_endline "loop_composant : /* Lambda, mot vide */") }
|
||
|
| composant loop_composant { (print_endline "loop_composant : composant loop_composant") }
|
||
|
|
||
|
loop_nom_qualfie : /* Lambda, mot vide */ { (print_endline "loop_nom_qualifie : /* Lambda, mot vide */") }
|
||
|
| UL_PT UL_IDENT loop_nom_qualfie { (print_endline "loop_nom_qualifie : PT IDENT loop_nom_qualifie") }
|
||
|
|
||
|
loop_etat : /* Lambda, mot vide */ { (print_endline "loop_etat : /* Lambda, mot vide */") }
|
||
|
| etat loop_etat { (print_endline "loop_etat : etat loop_etat") }
|
||
|
|
||
|
loop_region : /* Lambda, mot vide */ { (print_endline "loop_region : /* Lambda, mot vide */") }
|
||
|
| region loop_region { (print_endline "loop_region : region loop_region") }
|
||
|
|
||
|
option_starts : /* Lambda, mot vide */ { (print_endline "option_starts : /* Lambda, mot vide */") }
|
||
|
| UL_STARTS { (print_endline "option_starts : STARTS") }
|
||
|
|
||
|
option_ends : /* Lambda, mot vide */ { (print_endline "option_ends : /* Lambda, mot vide */") }
|
||
|
| UL_ENDS { (print_endline "option_ends : ENDS") }
|
||
|
|
||
|
option_regions : /* Lambda, mot vide */ { (print_endline "option_regions : /* Lambda, mot vide */") }
|
||
|
| UL_ACCOUV region loop_region UL_ACCFER { (print_endline "option_regions : ACCOUV region loop_region ACCFER") }
|
||
|
|
||
|
%%
|