1 2 /****************************************************************************** 3 * MODULE : drd_info.hpp 4 * DESCRIPTION: data relation descriptions 5 * COPYRIGHT : (C) 2003 Joris van der Hoeven 6 ******************************************************************************* 7 * This software falls under the GNU general public license version 3 or later. 8 * It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE 9 * in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>. 10 ******************************************************************************/ 11 12 #ifndef DRD_INFO_H 13 #define DRD_INFO_H 14 #include "tree.hpp" 15 #include "rel_hashmap.hpp" 16 #include "tag_info.hpp" 17 18 class drd_info; 19 class drd_info_rep: concrete_struct { 20 public: 21 string name; 22 rel_hashmap<tree_label,tag_info> info; 23 hashmap<string,tree> env; 24 25 public: 26 drd_info_rep (string name); 27 drd_info_rep (string name, drd_info base); 28 tree get_locals (); 29 bool set_locals (tree t); 30 bool contains (string l); 31 32 /* Properties of the tag itself */ 33 void set_type (tree_label tag, int tp); 34 int get_type (tree_label tag); 35 void freeze_type (tree_label tag); 36 int get_type (tree t); 37 38 void set_arity (tree_label tag, int arity, int extra, int am, int cm); 39 int get_arity_mode (tree_label tag); 40 int get_arity_base (tree_label tag); 41 int get_arity_extra (tree_label tag); 42 int get_child_mode (tree_label tag); 43 int get_nr_indices (tree_label tag); 44 void freeze_arity (tree_label tag); 45 int get_old_arity (tree_label l); 46 int get_minimal_arity (tree_label l); 47 int get_maximal_arity (tree_label l); 48 bool correct_arity (tree_label l, int i); 49 bool insert_point (tree_label l, int i, int n); 50 bool is_dynamic (tree t, bool hack= true); 51 52 void set_border (tree_label tag, int mode); 53 int get_border (tree_label tag); 54 void freeze_border (tree_label tag); 55 bool is_child_enforcing (tree t); 56 bool is_parent_enforcing (tree t); 57 bool var_without_border (tree_label tag); 58 59 void set_block (tree_label tag, int is_block); 60 int get_block (tree_label tag); 61 void freeze_block (tree_label tag); 62 63 void set_with_like (tree_label tag, bool is_with_like); 64 bool get_with_like (tree_label tag); 65 void freeze_with_like (tree_label tag); 66 bool is_with_like (tree t); 67 68 void set_var_type (tree_label tag, int vt); 69 int get_var_type (tree_label tag); 70 void freeze_var_type (tree_label tag); 71 72 void set_attribute (tree_label tag, string which, tree val); 73 tree get_attribute (tree_label tag, string which); 74 void set_name (tree_label tag, string val); 75 void set_long_name (tree_label tag, string val); 76 void set_syntax (tree_label tag, tree val); 77 string get_name (tree_label tag); 78 string get_long_name (tree_label tag); 79 tree get_syntax (tree_label tag); 80 tree get_syntax (tree t, path p= path (-1)); 81 82 /* Properties of the children of the tag */ 83 void set_type (tree_label tag, int nr, int tp); 84 int get_type (tree_label tag, int nr); 85 void freeze_type (tree_label tag, int nr); 86 int get_type_child (tree t, int child); 87 88 void set_accessible (tree_label tag, int nr, int access_mode); 89 int get_accessible (tree_label tag, int nr); 90 void freeze_accessible (tree_label tag, int nr); 91 bool all_accessible (tree_label tag); 92 bool none_accessible (tree_label tag); 93 bool is_accessible_child (tree t, int child); 94 bool is_accessible_path (tree t, path p); 95 96 void set_writability (tree_label tag, int nr, int writability); 97 int get_writability (tree_label tag, int nr); 98 void freeze_writability (tree_label tag, int nr); 99 int get_writability_child (tree t, int child); 100 101 void set_block (tree_label tag, int nr, int require_block); 102 int get_block (tree_label tag, int nr); 103 void freeze_block (tree_label tag, int nr); 104 105 void set_env (tree_label tag, int nr, tree env); 106 tree get_env (tree_label tag, int nr); 107 void freeze_env (tree_label tag, int nr); 108 tree get_env_child (tree t, int child, tree env); 109 tree get_env_child (tree t, int child, string var, tree val); 110 tree get_env_descendant (tree t, path p, tree env); 111 112 void set_child_name (tree_label tag, int nr, string val); 113 void set_child_long_name (tree_label tag, int nr, string val); 114 string get_child_name (tree_label tag, int nr); 115 string get_child_long_name (tree_label tag, int nr); 116 string get_child_name (tree t, int child); 117 string get_child_long_name (tree t, int child); 118 119 /* Heuristic initialization */ 120 void set_environment (hashmap<string,tree> env); 121 tree arg_access (tree t, tree arg, tree env, int& type); 122 bool heuristic_with_like (tree t, tree arg); 123 bool heuristic_init_macro (string var, tree macro); 124 bool heuristic_init_xmacro (string var, tree xmacro); 125 bool heuristic_init_parameter (string var, string val); 126 bool heuristic_init_parameter (string var, tree val); 127 void heuristic_init (hashmap<string,tree> env); 128 129 friend class drd_info; 130 friend tm_ostream& operator << (tm_ostream& out, drd_info drd); 131 }; 132 133 class drd_info { 134 CONCRETE(drd_info); 135 drd_info (string name); 136 drd_info (string name, drd_info base); 137 operator tree (); 138 }; 139 CONCRETE_CODE(drd_info); 140 141 tree drd_env_write (tree env, string var, tree val); 142 tree drd_env_merge (tree env, tree t); 143 tree drd_env_read (tree env, string var, tree val= tree (UNINIT)); 144 145 #endif // defined DRD_INFO_H 146