View
107
Download
3
Category
Preview:
Citation preview
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
ABTools : un environnement de prototypage pour la méthode B
Boulanger Jean-LouisJean-Louis.Boulanger@hds.utc.fr
Heudiasyc UMR CNRS 6599
Université de Technologie de Compiègne
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Plan
• Quoi de neuf ?
• Exemple de mise en place d’une extension B.
• Conclusion
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Quoi de neuf ?
ABTools 0.3.2
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
État des lieux
• B Classic– Lexeur/Parseur : OK– Décompileur graphique : OK– Décompileur textuel (ASCII, XML, LATEX et HTML) : OK– Typeur (générique) : Finalisation– Normalisateur (retrait des définitions) : Finalisation– GOP : Début
• B Prime– Lexeur/Parseur : OK– Décompileur graphique : OK– Décompileur textuel (ASCII, XML, LATEX et HTML) : OK
• B Système– Lexeur/Parseur : OK– Décompileur graphique : OK– Décompileur textuel (ASCII, XML, LATEX et HTML) : OK
• B Event– Lexeur/Parseur : OK– Décompileur graphique : OK– Décompileur textuel (ASCII, XML, LATEX et HTML) : OK
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Outils utilisés
• ANTLR 2.7.2a– www.antlr.org
• JAVA 2 v 1.4
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Exemple d’extension
Prototypage du B événementiel
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
B événementiel
• Projet MATISSE :• http://www.atelierb.societe.com/evt2b/evt2b.html
• Documentation– Manuel de Référence
Défini comme une extension du MR B
– Manuel Utilisateur Bevent2B
• Un outil utilisant le kernel
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Intégration dans ABTools
• Création de l’arbre syntaxique:– Définir un lexer et un parser
• Décompilation– Définir un parcoureur d’arbre (treewalker)
• Génération d’un code B équivalent– Définir un parcoureur d’arbre (treewalker)
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Parsing
• Nous disposons d’une grammaire déjà validée, et tout comme cela est fait dans le MU, il « suffit » de l’étendre.– BEvent hérite de B
– BEvent surcharge certaines règles de B
– BEvent introduit de nouvelles règles
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Composant B système
• Component ::=Abstract_system
| Refinement*
• composant [boolean loadLinked] :{
LoadLinked = loadLinked;}( machine
| refinement| /* Empty sources files are *not* allowed. */
{ System.err.println ( "ABParser Warning : Empty
source file!" ); errors.WSyntaxic ( "BEvent.g", "The file is empty" ); }
);
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Description d’un système (1)
System_abstract ::="SYSTEM" Header
Clause_system_abstract*"END"
Clause_system_abstract ::=Clause_constraints
| Clause_sees| Clause_sets| Clause_concrete_constants| Clause_abstract_constants| Clause_properties| Clause_concrete_variables| Clause_abstract_variables| Clause_invariant| Clause_assertions| Clause_initialization| Clause_events| Clause_modalities
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Description d’un système (2)
• machine :B_SYSTEM^
paramName( constraints| sees| sets| constants| aconstants| properties| variables| cvariables| invariant| assertions| initialisation_mch| events_mch| modalities)*
B_END! EOF!
;
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Rappel MR B
• Instruction
• Instruction_corps_opération
• Substitution
• Substitution_corps_opération
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
ANY avec post-condition (1)
Substitution_unbounded_choice_postcondition ::= "ANY"
Ident_ren+”,” "WHERE "
Predicate "THEN"
Substitution "POST"
Predicate "END"
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
ANY avec post-condition (2)
• substitution_unbounded_choice_postcondition_mch :
B_ANY^ listIdentifier
B_WHERE! expression
B_THEN! substitution_mch
B_POST!predicate
B_END!;
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Les raffinements (1)
Refinement ::="Refinement" HeaderClause_refinement*
"END"Clause_refinement ::=
Clause_constraints| Clause_sees| Clause_variant| Clause_sets| Clause_concrete_constants| Clause_abstract_constants| Clause_properties| Clause_concrete_variables| Clause_abstract_variables| Clause_invariant| Clause_assertions| Clause_initialization| Clause_events| Clause_modalities
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Les raffinements (2)
• refinement :B_REFINEMENT^
paramName ( refines | constraints | sees | sets | aconstants | constants | properties | variables | cvariables | invariant | variant
| assertions | initialisation_ref | events_ref | modalities)*B_END!EOF!
;
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Variant
• MR– Clause_variant ::= “VARIANT” Variant
– Variant ::= Expression_arithmetical
• ABTools– variant : B_VARIANT^ a_variant ;
– a_variant : predicate ;
– Plus une règle de typage
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Variable « prime »
REFINEMENTtoy_1
REFINEStoy
VARIABLESaa, bb’
INVARIANTbb’: 0..aa & (bb’=aa y bb’=bb)
VARIANTaa-bb’
INITIALISATIONaa, bb’ := 0, 0
EVENTSev1 = ANY xx WHERE xx: N & bb’ = aa THEN aa, bb’ := xx, 0 END
; ev2 = SELECT bb’<aa THEN bb’ := bb’ +1 ENDEND
• Confusion avec a’b qui est la manipulation de champs de record
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Les Events du MR
Clause_events ::= "EVENTS" Event+";"
Event ::= Ident_ren [ref Ident_ren+","] "="Substitution_event_body
Substitution_event_body ::=Substitution_bloc
| Substitution_postcondition| Substitution_selection| Substitution_selection_postcondition| Substitution_unbounded_choice| Substitution_unbounded_choice_postcondition
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Pour une machine
• eventMch :nameRenamed
c:B_EQUAL^ {#c.setType(OP_DEF);} substitution_event_mch
;
• substitution_event_mch :substitution_mch
| substitution_block_postcondition_mch| substitution_precondition_postcondition_mch| substitution_selection_mch| substitution_selection_postcondition_mch| substitution_unbounded_choice_mch| substitution_unbounded_choice_postcondition_mch;
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Et pour un raffinement
• eventRef :an_event_ref
c:B_EQUAL^ { #c.setType(OP_DEF);} substitution_event_ref ;
• an_event_ref : nameRenamed (B_REF^ listNameRenamed)? ;
• listNameRenamed :nameRenamed (B_COMMA^ nameRenamed)*;
• substitution_event_ref :parallele_ref
| substitution_block_postcondition_ref| substitution_precondition_postcondition_ref| substitution_selection_ref| substitution_selection_postcondition_ref| substitution_unbounded_choice_ref| substitution_unbounded_choice_postcondition_ref;
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Mais ça ne marche pas ….
• Il n’est pas possible de définir un k permettant de distinguer les substitutions B des substitutions POST
• Exemple– BEGIN substitution END
– BEGIN substitution POST predicat END
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Une « bonne » solution
• Surcharger les règles définissant les substitutions:
• substitution_event_mch : substitution_mch ;• Substitution_block_mch :
« BEGIN »^ substitution_mch (« POST »^ predicat)? ;
On a un arbre du type: POST
BEGIN
substitution
predicat
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Parcoureur d’arbre
• class EventTreeWalker extends TreeWalker;options{
importVocab = BEvent; buildAST = false; ASTLabelType = "MyNode"; codeGenMakeSwitchThreshold = 3; codeGenBitsetTestThreshold = 4;
k = 1;}
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Traitement de la machine
• machine :#(tt:B_SYSTEM
{index.Add();printToStringln(out.Clause(tt.getText()));
} paramName{
printToStringln("");} clauses{
printToString(out.Clause("END"));}
);
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Conclusion
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Ce qui est fait …….et Ce qui reste à faire
• Prévu:– Parser B Event : OK
– Décompileur B Event : OK
– Typeur : OK
– Générateur de B : A faire
• A faire– GOP
– Animateur de spécification B Event
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Quelques métriques
• Temps passé – Parseur moins d’un jour
– Décompilateur \\
– Evolution du typeur \\
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Intérêts
• Prototypage rapide,– Un langage unique de description
– Ce langage manipule directement les AST
– Peu de code manuel
– Génération de Code (C++, JAVA)
– Génération de DOC (HTML, XML)
• Obtenir une formalisation des concepts mis en place
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Résultats
• Parsing et décompilation de tous les exemples présentés dans le MR et MU.
CNAM – 13 et 14 Juin 2002
UMR CNRS 6599 Heuristique et Diagnostic des Systèmes Complexes
Download
http://www.chez.com/abtools
Recommended