| 1 | % (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, | |
| 2 | % Heinrich Heine Universitaet Duesseldorf | |
| 3 | % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) | |
| 4 | ||
| 5 | % This module is a version of the XTL interpreter as plugin | |
| 6 | ||
| 7 | :- module(testaddon, [plugin_info/1]). | |
| 8 | ||
| 9 | plugin_info([ | |
| 10 | % The name of the Plugin | |
| 11 | name = 'Demonstration of a B Plugin' | |
| 12 | % Author is not used yet | |
| 13 | %,author = 'Mark Mustermann' | |
| 14 | % marks the plugin as unstable or stable | |
| 15 | ,status = unstable | |
| 16 | % A list of supported file extensions together with a file description | |
| 17 | % (They are not used here because the plugin is used for an already loaded | |
| 18 | % file, see plugin_for_modes) | |
| 19 | % ,file_extensions = [ ('Plugin demonstration spec', ['.xtl2', '.PPP']) ] | |
| 20 | % The predicate that is used to load a file. The first argument is the | |
| 21 | % filename, the second the file extension (like '.mch'). | |
| 22 | %,load_file = load_spec/1 | |
| 23 | % The transition skeleton initialises a transition variable in such | |
| 24 | % way that only a part of all transitions match it. It is used to | |
| 25 | % separate time outs and maximum number of computations for several | |
| 26 | % transition classes (like different operations). | |
| 27 | %,transition_skeleton = trans_skel/1 | |
| 28 | % The predicate that computes a transition in the state-space, its | |
| 29 | % arguments are SourceState,Operation,DestinationState,ListOfOperationInfos. | |
| 30 | ,transition = do_transition/4 | |
| 31 | % The predicate that computes an initial state, its arguments are | |
| 32 | % Operation,DestinationState,ListOfOperationInfos. | |
| 33 | ,initialisation = do_initialisation/3 | |
| 34 | % A predicate that returns a property for a given state, its arguments | |
| 35 | % are State,Property. | |
| 36 | ,state_property = find_state_property/2 | |
| 37 | % A predicate that receives a list of expressions,predicates and | |
| 38 | % predicates on transitions as input (list of codes) and returns | |
| 39 | % the parsed expressions. | |
| 40 | % Its arguments are ListOfExpressionStrings,ListOfPredicateStrings, | |
| 41 | % ListOfTransitionPredicateStrings,ListOfExpressions,ListOfPredicates, | |
| 42 | % ListOfTransitionPredicates. | |
| 43 | %,parser = parse_spec/6 | |
| 44 | % A predicate that computes a value of an expression (returned by | |
| 45 | % the parser above) in a state. Its arguments are Expression,State | |
| 46 | %,compute_expression = compute/2 | |
| 47 | % A predicate that evaluates a predicate (returned by the parser above) | |
| 48 | % in a state. Its arguments are Predicate,State | |
| 49 | %,evaluate_predicate = eval/2 | |
| 50 | % A predicate that evaluates a predicate (returned by the parser above) | |
| 51 | % for a transition. Its arguments are Predicate,Transition | |
| 52 | %,evaluate_transition = evaltrans/2 | |
| 53 | % A predicate that checks if a state is initialised. Its argument is a State | |
| 54 | %,is_initialised_state = is_init/1 | |
| 55 | % Pretty-print a transition, the first argument is the transition, the | |
| 56 | % second -the result- is a list of codes. | |
| 57 | %,prettyprint_transition = pp_trans/2 | |
| 58 | % Pretty-print a property, the first argument is the property, the | |
| 59 | % second -the result- is a list of codes. | |
| 60 | %,prettyprint_property = pp_prop/2 | |
| 61 | % Syntax colouring is defined by specifying a list of rules, each | |
| 62 | % containing of a regular expression and a colour class | |
| 63 | %,syntax_colouring = [pair('/\\*', '\\*/',syntax_comment), | |
| 64 | % expression('(?=\\m)(start|trans|prop)(?=\\M)', syntax_keyword), | |
| 65 | % expression('(?=\\m)(true|fail|atomic|nonvar|var|functor|op|is|ground|member|append|length)(?=\\M)|=', syntax_type), | |
| 66 | % expression(':-|!|-->|;|\\.', syntax_assignment), | |
| 67 | % expression('%(.*)', syntax_comment)] | |
| 68 | ,plugin_for_modes = [b,z] | |
| 69 | ,plugin_init=plugin_init/0 | |
| 70 | ,new_transition_notification=newtrans/4 | |
| 71 | ]). | |
| 72 | ||
| 73 | :- use_module(probsrc(bmachine)). | |
| 74 | :- use_module(probsrc(translate)). | |
| 75 | :- use_module(probsrc(state_space),[state_space_initialise/0]). | |
| 76 | ||
| 77 | :- use_module(probsrc(module_information)). | |
| 78 | :- module_info(group,plugin). | |
| 79 | :- module_info(description,'This is an example plugin for the experimental plugin structure.'). | |
| 80 | :- module_info(revision,'$Rev$'). | |
| 81 | :- module_info(lastchanged,'$LastChangedDate$'). | |
| 82 | ||
| 83 | :- public plugin_init/0. | |
| 84 | plugin_init :- | |
| 85 | state_space_initialise. | |
| 86 | ||
| 87 | :- public do_initialisation/3. | |
| 88 | do_initialisation(Operation,operation(Operation),[]) :- | |
| 89 | b_top_level_operation(Operation). | |
| 90 | :- public do_transition/4. | |
| 91 | do_transition(_State,_Operation,_NewState,[]) :- | |
| 92 | fail. | |
| 93 | ||
| 94 | :- public find_state_property/2. | |
| 95 | find_state_property(operation(Operation),Property) :- | |
| 96 | b_get_machine_operation(Operation,_,Params,_), | |
| 97 | member(P,Params), | |
| 98 | translate_bexpression(P,Property). | |
| 99 | ||
| 100 | :- public newtrans/4. | |
| 101 | newtrans(FromId,TransId,DstId,Exists) :- | |
| 102 | write('**testaddon** new transition from '), | |
| 103 | write(FromId), write(' to '), | |
| 104 | ( Exists==exists -> write('existing '); write('new ')), | |
| 105 | write(DstId), write(': '), | |
| 106 | write(TransId),nl. | |
| 107 | ||
| 108 |