DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 41177 (0xa0d9) Types: TextFile Names: »B«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧
with Lex2; with Follow; with Token; with Text_Io; use Token; use Follow; package body Parse is -- date de creation : 24/11/93 -- MAJ : 1/12/93 par Olivier Martin Parse simple -- date de derniere MAJ : 13/12/93 par Emmanuel PRATZ Parse + rec -- en mode panic procedure Parse_Les_Ordres (Ok : out Boolean); procedure Parse_Facteur (Ok : out Boolean); procedure Parse_Expression (Ok : out Boolean); procedure Parse_Error (Ensemble : Token_Set.Set) is begin Text_Io.Put_Line ("erreur de syntaxe"); -- Lex2.Next; while not Token_Set.Is_Member (Ensemble, Lex2.Get_Token) loop Text_Io.Put_Line ("tentative de synchronisation"); Lex2.Next; end loop; end Parse_Error; procedure Parse_Variable (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_variable"); case Lex2.Get_Token is when L_Id | L_Nbr => Lex2.Next; when others => Ok := False; end case; end Parse_Variable; procedure Parse_Dans_Suite (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_dans_suite"); while Lex2.Get_Token /= L_Fin loop if Lex2.Get_Token = L_Puis then Lex2.Next; while Lex2.Get_Token /= L_Fin loop Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; end loop; Lex2.Next; if Lex2.Get_Token = L_Puis then Lex2.Next; else Ok := False; exit; end if; else Ok := False; exit; end if; end loop; end Parse_Dans_Suite; procedure Parse_Attendre (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_attendre"); if Lex2.Get_Token = L_Attendre then Lex2.Next; Parse_Expression (Ok1); if not Ok1 then Parse_Error (Expr_Follow); end if; else Ok := False; end if; end Parse_Attendre; procedure Parse_Pour (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_pour"); if Lex2.Get_Token = L_Pour then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Parmi then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Faire then Lex2.Next; Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Pour then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Pour; procedure Parse_Relation (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_relation"); case Lex2.Get_Token is when L_Inf | L_Sup | L_Egal | L_Pas_Egal | L_Inf_Ou_Egal | L_Sup_Ou_Egal => Lex2.Next; when others => Ok := False; end case; end Parse_Relation; procedure Parse_Condition (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_condition"); Parse_Expression (Ok1); if not Ok1 then Parse_Error (Expr_Follow); end if; Parse_Relation (Ok1); if not Ok1 then Parse_Error (Relation_Follow); end if; Parse_Expression (Ok1); if not Ok1 then Parse_Error (Expr_Follow); end if; end Parse_Condition; procedure Parse_Tant_Que (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_tant_que"); if Lex2.Get_Token = L_Tantque then Lex2.Next; Parse_Condition (Ok1); if not Ok1 then Parse_Error (Condition_Follow); end if; if Lex2.Get_Token = L_Faire then Lex2.Next; Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Tantque then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Tant_Que; procedure Parse_Repeter (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_repeter"); if Lex2.Get_Token = L_Repeter then Lex2.Next; Parse_Variable (Ok1); if not Ok1 then Parse_Error (Variable_Follow); end if; if Lex2.Get_Token = L_Fois then Lex2.Next; Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Repeter then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Repeter; procedure Parse_Debut (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_debut"); if Lex2.Get_Token = L_Debut then Lex2.Next; Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; else Ok := False; end if; else Ok := False; end if; end Parse_Debut; procedure Parse_Activer (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_activer"); if Lex2.Get_Token = L_Activer then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Point then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Activer; procedure Parse_Desactiver (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_desactiver"); if Lex2.Get_Token = L_Desact then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Point then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Desactiver; procedure Parse_Changer (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_changer"); if Lex2.Get_Token = L_Changer then Lex2.Next; if Lex2.Get_Token = L_Ouvrante then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Point then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Virgule then Lex2.Next; Parse_Variable (Ok1); if not Ok1 then Parse_Error (Variable_Follow); end if; if Lex2.Get_Token = L_Fermante then Lex2.Next; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Changer; procedure Parse_Evoluer (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_evoluer"); if Lex2.Get_Token = L_Evoluer then Lex2.Next; if Lex2.Get_Token = L_Ouvrante then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Point then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Virgule then Lex2.Next; Parse_Variable (Ok1); if not Ok1 then Parse_Error (Variable_Follow); end if; if Lex2.Get_Token = L_Virgule then Lex2.Next; Parse_Variable (Ok1); if not Ok1 then Parse_Error (Variable_Follow); end if; if Lex2.Get_Token = L_Fermante then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Evoluer; procedure Parse_Affectation (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_affectation"); if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Affect then Lex2.Next; Parse_Expression (Ok1); if not Ok1 then Parse_Error (Expr_Follow); end if; else Ok := False; end if; else Ok := False; end if; end Parse_Affectation; procedure Parse_Groupe (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_groupe"); Parse_Expression (Ok1); if not Ok1 then Parse_Error (Expr_Follow); end if; while Lex2.Get_Token /= L_Crochet_Fermant loop if Lex2.Get_Token = L_Virgule then Lex2.Next; Parse_Expression (Ok1); if not Ok1 then Parse_Error (Expr_Follow); end if; else Ok := False; exit; end if; end loop; end Parse_Groupe; procedure Parse_Facteur (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_facteur"); case Lex2.Get_Token is when L_Ouvrante => Lex2.Next; Parse_Expression (Ok1); if not Ok1 then Parse_Error (Expr_Follow); end if; if Lex2.Get_Token = L_Fermante then Lex2.Next; else Ok := False; end if; when L_Id | L_Nbr => Lex2.Next; when L_Crochet_Ouvrant => Lex2.Next; Parse_Groupe (Ok1); if not Ok1 then Parse_Error (Groupe_Follow); end if; if Lex2.Get_Token = L_Crochet_Fermant then Lex2.Next; else Ok := False; end if; when others => Ok := False; end case; end Parse_Facteur; procedure Parse_Terme (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_terme"); Parse_Facteur (Ok1); if not Ok1 then Parse_Error (Facteur_Follow); end if; while not Token_Set.Is_Member (Term_Follow, Lex2.Get_Token) loop case Lex2.Get_Token is when L_Mult | L_Div => Lex2.Next; Parse_Facteur (Ok1); if not Ok1 then Parse_Error (Facteur_Follow); end if; when others => Ok := False; exit; end case; end loop; end Parse_Terme; procedure Parse_Expression (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_expression"); Parse_Terme (Ok1); if not Ok1 then Parse_Error (Term_Follow); end if; while not Token_Set.Is_Member (Expr_Follow, Lex2.Get_Token) loop case Lex2.Get_Token is when L_Plus | L_Moins => Lex2.Next; Parse_Terme (Ok1); if not Ok1 then Parse_Error (Term_Follow); end if; when others => Ok := False; exit; end case; end loop; end Parse_Expression; procedure Parse_Dans (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_Dans"); if Lex2.Get_Token = L_Dans then Lex2.Next; Parse_Variable (Ok1); if not Ok1 then Parse_Error (Variable_Follow); end if; if Lex2.Get_Token = L_Faire then Lex2.Next; Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; Parse_Dans_Suite (Ok1); if not Ok1 then Parse_Error (Dans_Suite_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Dans; procedure Parse_Un_Parametre_Reel (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_un_paramatre_reel"); case Lex2.Get_Token is when L_Id | L_Nbr => Lex2.Next; when others => Ok := False; end case; end Parse_Un_Parametre_Reel; procedure Parse_Autre_Parametre_Reel (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_autre_parametre_reel"); while Lex2.Get_Token /= L_Fermante loop if Lex2.Get_Token = L_Virgule then Lex2.Next; Parse_Variable (Ok1); if not Ok1 then Parse_Error (Variable_Follow); end if; end if; end loop; end Parse_Autre_Parametre_Reel; procedure Parse_Parametres_Reels (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_appel_pararmetres_reels"); if Lex2.Get_Token = L_Ouvrante then Lex2.Next; Parse_Variable (Ok1); if not Ok1 then Parse_Error (Variable_Follow); end if; Parse_Autre_Parametre_Reel (Ok1); if not Ok1 then Parse_Error (Autre_Parametre_Reel_Follow); end if; if Lex2.Get_Token = L_Fermante then Lex2.Next; else Ok := False; end if; else Ok := False; end if; end Parse_Parametres_Reels; procedure Parse_Appel_Effet (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_appel_effet"); if Lex2.Get_Token = L_Appel_Effet then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; Parse_Parametres_Reels (Ok1); if not Ok1 then Parse_Error (Parametres_Follow); end if; else Ok := False; end if; else Ok := False; end if; end Parse_Appel_Effet; procedure Parse_Appel_Scene (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_appel_scene"); if Lex2.Get_Token = L_Lancer_Scene then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; else Ok := False; end if; else Ok := False; end if; end Parse_Appel_Scene; procedure Parse_Les_Ordres (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_les_ordres"); while Lex2.Get_Token /= L_Puis and Lex2.Get_Token /= L_Fin loop case Lex2.Get_Token is when L_Dans => Parse_Dans (Ok1); if not Ok1 then Parse_Error (Dans_Follow); end if; when L_Tantque => Parse_Tant_Que (Ok1); if not Ok1 then Parse_Error (Tant_Que_Follow); end if; when L_Attendre => Parse_Attendre (Ok1); if not Ok1 then Parse_Error (Attendre_Follow); end if; when L_Pour => Parse_Pour (Ok1); if not Ok1 then Parse_Error (Pour_Follow); end if; when L_Repeter => Parse_Repeter (Ok1); if not Ok1 then Parse_Error (Repeter_Follow); end if; when L_Debut => Parse_Debut (Ok1); if not Ok1 then Parse_Error (Debut_Follow); end if; when L_Activer => Parse_Activer (Ok1); if not Ok1 then Parse_Error (Activer_Follow); end if; when L_Desact => Parse_Desactiver (Ok1); if not Ok1 then Parse_Error (Desactiver_Follow); end if; when L_Changer => Parse_Changer (Ok1); if not Ok1 then Parse_Error (Changer_Follow); end if; when L_Evoluer => Parse_Evoluer (Ok1); if not Ok1 then Parse_Error (Evoluer_Follow); end if; when L_Id => Parse_Affectation (Ok1); if not Ok1 then Parse_Error (Affectation_Follow); end if; when L_Appel_Effet => Parse_Appel_Effet (Ok1); if not Ok1 then Parse_Error (Appel_Effet_Follow); end if; when L_Lancer_Scene => Parse_Appel_Scene (Ok1); if not Ok1 then Parse_Error (Appel_Scene_Follow); end if; when others => Ok := False; exit; end case; end loop; end Parse_Les_Ordres; procedure Parse_Scenes (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_scenes"); while Lex2.Get_Token /= L_Debut loop if Lex2.Get_Token = L_Scene then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Est then Lex2.Next; if Lex2.Get_Token = L_Constitue then Lex2.Next; Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Scene then Lex2.Next; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; end if; else Ok := False; exit; end if; end loop; end Parse_Scenes; procedure Parse_Spectacle (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_spectacle"); if Lex2.Get_Token = L_Spectacle then Lex2.Next; if Lex2.Get_Token = L_Est then Lex2.Next; if Lex2.Get_Token = L_Constitue then Lex2.Next; Parse_Scenes (Ok1); if not Ok1 then Parse_Error (Scenes_Follow); end if; if Lex2.Get_Token = L_Debut then Lex2.Next; Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Spectacle then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Spectacle; procedure Parse_Autre_Parametre (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_autre_parametres"); while Lex2.Get_Token /= L_Fermante loop if Lex2.Get_Token = L_Virgule then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; else Ok := False; exit; end if; else Ok := False; exit; end if; end loop; end Parse_Autre_Parametre; procedure Parse_Parametres (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_parametres"); if Lex2.Get_Token /= L_Est then if Lex2.Get_Token = L_Ouvrante then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; Parse_Autre_Parametre (Ok1); if not Ok1 then Parse_Error (Autre_Parametre_Follow); end if; if Lex2.Get_Token = L_Fermante then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end if; end Parse_Parametres; procedure Parse_Les_Experiences (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_lex_experiences"); while Lex2.Get_Token /= L_Fin loop if Lex2.Get_Token = L_Effet then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; Parse_Parametres (Ok1); if not Ok1 then Parse_Error (Parametre_Follow); end if; if Lex2.Get_Token = L_Est then Lex2.Next; if Lex2.Get_Token = L_Constitue then Lex2.Next; Parse_Les_Ordres (Ok1); if not Ok1 then Parse_Error (Les_Ordres_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Effet then Lex2.Next; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; end loop; end Parse_Les_Experiences; procedure Parse_Experience (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_experience"); if Lex2.Get_Token = L_Exp then Lex2.Next; if Lex2.Get_Token = L_Est then Lex2.Next; if Lex2.Get_Token = L_Collection then Lex2.Next; Parse_Les_Experiences (Ok1); if not Ok1 then Parse_Error (Les_Experiences_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Exp then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Experience; procedure Parse_Stations (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_stations"); while Lex2.Get_Token /= L_Fin loop if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_2points then Lex2.Next; if Lex2.Get_Token = L_Station then Lex2.Next; if Lex2.Get_Token = L_Ouvrante then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Virgule then Lex2.Next; if Lex2.Get_Token = L_Adresse then Lex2.Next; if Lex2.Get_Token = L_Fermante then Lex2.Next; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; end loop; end Parse_Stations; procedure Parse_Theatre (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_theatre"); if Lex2.Get_Token = L_Theatre then Lex2.Next; if Lex2.Get_Token = L_Est then Lex2.Next; if Lex2.Get_Token = L_Collection then Lex2.Next; Parse_Stations (Ok1); if not Ok1 then Parse_Error (Stations_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Theatre then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Theatre; procedure Parse_Type_Actor (Ok : out Boolean) is begin Ok := True; Text_Io.Put_Line ("parse_type_actor"); case Lex2.Get_Token is when L_Binaire | L_Discret | L_Fugitif | L_Temporel => Lex2.Next; when others => Ok := False; end case; end Parse_Type_Actor; procedure Parse_Acteurs (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_acteurs"); while Lex2.Get_Token /= L_Fin loop Text_Io.Put_Line ("pepe"); if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_2points then Lex2.Next; if Lex2.Get_Token = L_Acteur then Lex2.Next; if Lex2.Get_Token = L_Ouvrante then Lex2.Next; Parse_Type_Actor (Ok1); if not Ok1 then Parse_Error (Type_Actor_Follow); end if; Text_Io.Put_Line ("type acteur fini"); if Lex2.Get_Token = L_Virgule then Lex2.Next; if Lex2.Get_Token = L_Nbr then Lex2.Next; if Lex2.Get_Token = L_Fermante then Lex2.Next; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; end loop; end Parse_Acteurs; procedure Parse_Corps_Materiel (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_corps_materiel"); while Lex2.Get_Token /= L_Fin loop Text_Io.Put_Line ("fiotte"); if Lex2.Get_Token = L_Id then Lex2.Next; if Lex2.Get_Token = L_Est then Lex2.Next; if Lex2.Get_Token = L_Constitue then Lex2.Next; Parse_Acteurs (Ok1); if not Ok1 then Parse_Error (Acteurs_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; else Ok := False; exit; end if; end loop; end Parse_Corps_Materiel; procedure Parse_Materiel (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; Text_Io.Put_Line ("parse_materiel"); if Lex2.Get_Token = L_Materiel then Lex2.Next; if Lex2.Get_Token = L_Est then Lex2.Next; if Lex2.Get_Token = L_Collection then Lex2.Next; Parse_Corps_Materiel (Ok1); if not Ok1 then Parse_Error (Corps_Materiel_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Materiel then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Materiel; procedure Parse_Start (Ok : out Boolean) is Ok1 : Boolean := True; begin Ok := True; if Lex2.Get_Token = L_Repres then Lex2.Next; if Lex2.Get_Token = L_Id then Lex2.Next; Parse_Materiel (Ok1); if not Ok1 then Parse_Error (Materiel_Follow); end if; Parse_Theatre (Ok1); if not Ok1 then Parse_Error (Theatre_Follow); end if; Parse_Experience (Ok1); if not Ok1 then Parse_Error (Experience_Follow); end if; Parse_Spectacle (Ok1); if not Ok1 then Parse_Error (Spectacle_Follow); end if; if Lex2.Get_Token = L_Fin then Lex2.Next; if Lex2.Get_Token = L_Repres then Lex2.Next; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; else Ok := False; end if; end Parse_Start; procedure Go is Fichier : constant String := ("bidon"); Ok : Boolean := True; begin Lex2.Open (Fichier); Init_Set; loop Lex2.Next; Parse_Start (Ok); if not Ok then Parse_Error (Start_Follow); end if; exit when Lex2.At_End; end loop; Lex2.Close; end Go; end Parse;