00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00038 #ifndef __NUSMV_CORE_PARSER_PSL_PSL_NODE_H__
00039 #define __NUSMV_CORE_PARSER_PSL_PSL_NODE_H__
00040
00041 #include "nusmv/core/node/node.h"
00042 #include "nusmv/core/utils/utils.h"
00043 #include "nusmv/core/utils/error.h"
00044 #include "nusmv/core/utils/ErrorMgr.h"
00045
00046
00047
00048
00049
00050
00051
00052
00053
00059 typedef node_ptr PslNode_ptr;
00060
00066 typedef short int PslOp;
00067
00068 typedef enum PslOpConvType_TAG {
00069 TOK2PSL,
00070 TOK2SMV,
00071 PSL2SMV,
00072 PSL2PSL,
00073 PSL2TOK
00074 } PslOpConvType;
00075
00076
00077
00078
00079
00080
00086 #define PSL_NULL ((PslNode_ptr) NULL)
00087
00093 #define PSLNODE_TO_INT(x) \
00094 ((int) (nusmv_ptrint) x)
00095
00101 #define PSLNODE_FROM_INT(x) \
00102 ((PslNode_ptr) (nusmv_ptrint) x)
00103
00104
00105
00106
00107
00108
00124 node_ptr PslNode_convert_psl_to_core(const NuSMVEnv_ptr env, PslNode_ptr expr);
00125
00126 PslNode_ptr psl_new_node(NodeMgr_ptr nodemgr, PslOp op,
00127 PslNode_ptr left, PslNode_ptr right);
00128
00136 PslNode_ptr psl_node_get_left(PslNode_ptr n);
00137
00145 PslNode_ptr psl_node_get_right(PslNode_ptr n);
00146
00154 PslOp psl_node_get_op(PslNode_ptr n);
00155 void psl_node_set_left(PslNode_ptr n, PslNode_ptr l);
00156 void psl_node_set_right(PslNode_ptr n, PslNode_ptr r);
00157
00166 PslNode_ptr PslNode_convert_from_node_ptr(node_ptr expr);
00167
00176 node_ptr PslNode_convert_to_node_ptr(PslNode_ptr expr);
00177
00185 PslNode_ptr psl_node_make_true(NodeMgr_ptr nodemgr);
00186
00194 PslNode_ptr psl_node_make_false(NodeMgr_ptr nodemgr);
00195
00203 boolean psl_node_is_true(PslNode_ptr e);
00204
00212 boolean psl_node_is_false(PslNode_ptr e);
00213
00214 PslNode_ptr psl_node_prune(NodeMgr_ptr nodemgr,
00215 PslNode_ptr tree, PslNode_ptr branch);
00216
00217 boolean psl_node_is_sere(PslNode_ptr expr);
00218 PslNode_ptr psl_node_sere_star_get_count(const PslNode_ptr e);
00219 boolean psl_node_is_handled_star(const NuSMVEnv_ptr env,
00220 PslNode_ptr expr, boolean toplevel);
00221 boolean psl_node_sere_is_propositional(PslNode_ptr e);
00222 boolean psl_node_sere_is_repeated(PslNode_ptr e);
00223 boolean psl_node_sere_is_star(PslNode_ptr e);
00224
00232 PslNode_ptr psl_node_sere_star_get_starred(PslNode_ptr e);
00233
00234 boolean psl_node_sere_is_stareq(PslNode_ptr e);
00235 boolean psl_node_sere_is_starminusgt(PslNode_ptr e);
00236 boolean psl_node_sere_is_standalone_star(PslNode_ptr e);
00237 boolean psl_node_sere_is_plus(PslNode_ptr e);
00238 boolean psl_node_sere_is_standalone_plus(PslNode_ptr e);
00239 boolean psl_node_sere_is_star_count(PslNode_ptr e);
00240
00249 boolean psl_node_sere_is_star_count_zero(PslNode_ptr e);
00250 boolean psl_node_sere_is_concat_holes_free(PslNode_ptr e);
00251 boolean psl_node_sere_is_concat_fusion(PslNode_ptr e);
00252 boolean psl_node_sere_is_concat_fusion_holes_free(PslNode_ptr e);
00253 boolean psl_node_sere_is_2ampersand(PslNode_ptr e);
00254
00255 boolean psl_node_is_suffix_implication(PslNode_ptr expr);
00256 boolean psl_node_is_suffix_implication_weak(PslNode_ptr expr);
00257 boolean psl_node_is_suffix_implication_strong(PslNode_ptr expr);
00258
00259 boolean psl_node_is_propstar(PslNode_ptr e);
00260
00261 boolean psl_node_is_ite(PslNode_ptr _ite);
00262 PslNode_ptr psl_node_get_ite_cond(PslNode_ptr _ite);
00263 PslNode_ptr psl_node_get_ite_then(PslNode_ptr _ite);
00264 PslNode_ptr psl_node_get_ite_else(PslNode_ptr _ite);
00265
00266 boolean psl_node_is_case(PslNode_ptr _case);
00267 PslNode_ptr psl_node_get_case_cond(PslNode_ptr _case);
00268 PslNode_ptr psl_node_get_case_then(PslNode_ptr _case);
00269 PslNode_ptr psl_node_get_case_next(PslNode_ptr _case);
00270
00280 boolean psl_node_is_serebrackets(PslNode_ptr e);
00281
00292 boolean psl_node_sere_is_concat(PslNode_ptr e);
00293
00304 boolean psl_node_sere_is_fusion(PslNode_ptr e);
00305
00313 PslNode_ptr psl_node_sere_concat_get_left(PslNode_ptr e);
00314
00322 PslNode_ptr psl_node_sere_concat_get_right(PslNode_ptr e);
00323
00329 PslNode_ptr psl_node_sere_concat_get_leftmost(PslNode_ptr e);
00330
00336 PslNode_ptr psl_node_sere_concat_get_rightmost(PslNode_ptr e);
00337
00343 PslNode_ptr psl_node_sere_concat_cut_leftmost(NodeMgr_ptr nodemgr,
00344 PslNode_ptr e);
00345
00353 PslNode_ptr psl_node_sere_fusion_get_left(PslNode_ptr e);
00354
00362 PslNode_ptr psl_node_sere_fusion_get_right(PslNode_ptr e);
00363
00373 boolean psl_node_sere_is_or(PslNode_ptr e);
00374
00382 PslNode_ptr psl_node_sere_propositional_get_expr(PslNode_ptr e);
00383
00391 PslNode_ptr psl_node_sere_compound_get_left(PslNode_ptr e);
00392
00400 PslNode_ptr psl_node_sere_compound_get_right(PslNode_ptr e);
00401
00409 PslNode_ptr psl_node_make_sere_propositional(NodeMgr_ptr nodemgr,
00410 PslNode_ptr expr);
00411
00419 PslNode_ptr psl_node_make_sere_concat(NodeMgr_ptr nodemgr,
00420 PslNode_ptr seq1, PslNode_ptr seq2);
00421
00429 PslNode_ptr psl_node_make_sere_2ampersand(NodeMgr_ptr nodemgr,
00430 PslNode_ptr seq1, PslNode_ptr seq2);
00431
00439 PslNode_ptr psl_node_make_sere_star(NodeMgr_ptr nodemgr,
00440 PslNode_ptr seq);
00441
00442 PslNode_ptr psl_node_make_sere_compound(NodeMgr_ptr nodemgr,
00443 PslNode_ptr seq1, PslOp op,
00444 PslNode_ptr seq2);
00445 boolean psl_node_is_sere_compound_binary(PslNode_ptr e);
00446
00447 PslNode_ptr psl_node_make_cons(NodeMgr_ptr nodemgr,
00448 PslNode_ptr elem, PslNode_ptr next);
00449 PslNode_ptr psl_node_make_cons_new(NodeMgr_ptr nodemgr,
00450 PslNode_ptr elem, PslNode_ptr next);
00451
00452 boolean psl_node_is_boolean_type(PslNode_ptr expr);
00453
00454 boolean psl_node_is_leaf(PslNode_ptr expr);
00455
00464 boolean psl_node_is_infinite(PslNode_ptr expr);
00465 boolean psl_node_is_id(PslNode_ptr expr);
00466 boolean psl_node_is_id_equal(PslNode_ptr _id1, PslNode_ptr _id2);
00467
00475 boolean psl_node_is_number(PslNode_ptr e);
00476
00484 boolean psl_node_is_word_number(PslNode_ptr e);
00485
00486 PslNode_ptr psl_node_make_number(NodeMgr_ptr nodemgr,
00487 int value);
00488
00497 int psl_node_number_get_value(PslNode_ptr e);
00498 boolean psl_node_is_num_equal(PslNode_ptr _id1, PslNode_ptr _id2);
00499
00507 PslNode_ptr
00508 psl_node_make_failure(NodeMgr_ptr nodemgr, const char* msg, FailureKind kind);
00509
00517 PslNode_ptr
00518 psl_node_make_case(NodeMgr_ptr nodemgr,
00519 PslNode_ptr _cond,
00520 PslNode_ptr _then, PslNode_ptr _next);
00521
00529 boolean psl_node_is_range(PslNode_ptr expr);
00530
00538 PslNode_ptr psl_node_range_get_low(PslNode_ptr expr);
00539
00547 PslNode_ptr psl_node_range_get_high(PslNode_ptr expr);
00548
00549 boolean psl_node_is_cons(PslNode_ptr e);
00550
00558 PslNode_ptr psl_node_cons_get_element(PslNode_ptr e);
00559
00567 PslNode_ptr psl_node_cons_get_next(PslNode_ptr e);
00568 PslNode_ptr psl_node_cons_reverse(PslNode_ptr e);
00569
00570 PslNode_ptr psl_node_suffix_implication_get_premise(PslNode_ptr e);
00571 PslNode_ptr psl_node_suffix_implication_get_consequence(PslNode_ptr e);
00572 PslNode_ptr psl_node_sere_repeated_get_expr(PslNode_ptr e);
00573
00581 PslNode_ptr psl_node_sere_repeated_get_count(PslNode_ptr e);
00582
00590 PslOp psl_node_sere_repeated_get_op(PslNode_ptr e);
00591
00592 boolean psl_node_is_repl_prop(PslNode_ptr _prop);
00593 PslNode_ptr psl_node_repl_prop_get_property(PslNode_ptr _prop);
00594 PslNode_ptr psl_node_repl_prop_get_replicator(PslNode_ptr _prop);
00595
00596 boolean psl_node_is_replicator(PslNode_ptr _repl);
00597
00605 PslNode_ptr psl_node_get_replicator_value_set(PslNode_ptr _repl);
00606
00615 PslOp psl_node_get_replicator_join_op(PslNode_ptr _repl);
00616
00627 PslNode_ptr
00628 psl_node_get_replicator_normalized_value_set(const NuSMVEnv_ptr env,
00629 PslNode_ptr rep);
00630
00638 PslNode_ptr psl_node_get_replicator_range(PslNode_ptr _repl);
00639
00647 PslNode_ptr psl_node_get_replicator_id(PslNode_ptr _repl);
00648
00659 PslNode_ptr psl_node_context_to_main_context(NodeMgr_ptr nodemgr,
00660 PslNode_ptr context);
00661
00670 PslNode_ptr PslNode_new_context(NodeMgr_ptr nodemgr,
00671 PslNode_ptr ctx, PslNode_ptr node);
00672
00673 PslNode_ptr psl_node_make_extended_next(NodeMgr_ptr nodemgr,
00674 PslOp op, PslNode_ptr expr,
00675 PslNode_ptr when,
00676 PslNode_ptr condition);
00677 boolean psl_node_is_extended_next(PslNode_ptr e);
00678
00686 PslNode_ptr psl_node_extended_next_get_expr(PslNode_ptr next);
00687
00695 PslNode_ptr psl_node_extended_next_get_when(PslNode_ptr next);
00696
00704 PslNode_ptr
00705 psl_node_extended_next_get_condition(PslNode_ptr next);
00706
00707
00708
00709
00710
00721 boolean PslNode_is_handled_psl(const NuSMVEnv_ptr env, PslNode_ptr e);
00722
00732 boolean PslNode_is_propositional(const PslNode_ptr expr);
00733
00744 boolean PslNode_is_trans_propositional(const PslNode_ptr expr);
00745
00755 boolean PslNode_propositional_contains_next(const PslNode_ptr expr);
00756
00766 boolean PslNode_is_obe(const PslNode_ptr expr);
00767
00777 boolean PslNode_is_ltl(const PslNode_ptr expr);
00778
00779
00780 PslNode_ptr PslNode_convert_id(const NuSMVEnv_ptr env, PslNode_ptr id, PslOpConvType type);
00781 PslNode_ptr PslNode_pslobe2ctl(const NuSMVEnv_ptr env, PslNode_ptr expr, PslOpConvType type);
00782 PslNode_ptr PslNode_pslltl2ltl(const NuSMVEnv_ptr env, PslNode_ptr expr, PslOpConvType type);
00783 PslNode_ptr PslNode_remove_sere(const NuSMVEnv_ptr env, PslNode_ptr e);
00784 PslNode_ptr PslNode_remove_forall_replicators(const NuSMVEnv_ptr env, PslNode_ptr e);
00785
00786
00787 #endif