TP-automates/BE_2020_2021/ascendant/Parser.mly
2023-06-21 19:58:18 +02:00

71 lines
3.1 KiB
OCaml
Executable file

%{
(* 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") }
%%