PSDL_Node_Visitor.h

Go to the documentation of this file.
00001 /* -*- C++ -*- */
00002 // PSDL_Node_Visitor.h,v 1.1 2002/07/25 15:25:51 pgontla Exp
00003 //
00004 // ============================================================================
00005 //
00006 // = LIBRARY
00007 //    orbsvcs/PSS
00008 //
00009 // = FILENAME
00010 //    PSDL_Node_Visitor
00011 //
00012 // = DESCRIPTION
00013 //    This class serves as a base class for the classes that put the
00014 //    generated code that should go into the stubs. Derived classes
00015 //    override the necessary methods. Uses the Visitor Pattern.
00016 //
00017 // = AUTHOR
00018 //    Priyanka Gontla <gontla_p@ociweb.com>
00019 //
00020 // ============================================================================
00021 
00022 #ifndef TAO_PSDL_NODE_VISITOR_H
00023 #define TAO_PSDL_NODE_VISITOR_H
00024 
00025 #include "psdl_export.h"
00026 
00027 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00028 # pragma once
00029 #endif /* ACE_LACKS_PRAGMA_ONCE */
00030 
00031 #include "PSDL_Node.h"
00032 #include "ace/Array_Base.h"
00033 
00034 // Forward declarations.
00035 class TAO_PSDL_Visitor_Factory;
00036 
00037 
00038 class TAO_PSDL_Specification;
00039 class TAO_PSDL_Definition;
00040 class TAO_PSDL_Module;
00041 class TAO_PSDL_Abstract_Storagetype;
00042 class TAO_PSDL_Abstract_Storagetype_Dcl;
00043 class TAO_PSDL_Abstract_Storagetype_Fwd_Dcl;
00044 class TAO_PSDL_Abstract_Storagetype_Header;
00045 class TAO_PSDL_Abstract_Storagetype_Body;
00046 class TAO_PSDL_Abstract_Storagetype_Member;
00047 class TAO_PSDL_Abstract_Storagetype_Inh_Spec;
00048 class TAO_PSDL_Abstract_Storagetype_Name;
00049 class TAO_PSDL_Psdl_State_Dcl;
00050 class TAO_PSDL_Psdl_State_Type_Spec;
00051 class TAO_PSDL_Abstract_Storagetype_Ref_Type;
00052 class TAO_PSDL_Abstract_Storagehome;
00053 class TAO_PSDL_Abstract_Storagehome_Fwd_Dcl;
00054 class TAO_PSDL_Abstract_Storagehome_Dcl;
00055 class TAO_PSDL_Abstract_Storagehome_Header;
00056 class TAO_PSDL_Abstract_Storagehome_Body;
00057 class TAO_PSDL_Abstract_Storagehome_Member;
00058 class TAO_PSDL_Abstract_Storagehome_Inh_Spec;
00059 class TAO_PSDL_Abstract_Storagehome_Name;
00060 class TAO_PSDL_Local_Op_Dcl;
00061 class TAO_PSDL_Key_Dcl;
00062 class TAO_PSDL_Catalog;
00063 class TAO_PSDL_Catalog_Inh_Spec;
00064 class TAO_PSDL_Catalog_Name;
00065 class TAO_PSDL_Catalog_Body;
00066 class TAO_PSDL_Catalog_Member;
00067 class TAO_PSDL_Provides_Dcl;
00068 class TAO_PSDL_Storagetype;
00069 class TAO_PSDL_Storagetype_Dcl;
00070 class TAO_PSDL_Abstract_Storagetype_Fwd_Dcl;
00071 class TAO_PSDL_Abstract_Storagetype_Header;
00072 class TAO_PSDL_Abstract_Storagetype_Body;
00073 class TAO_PSDL_Abstract_Storagetype_Member;
00074 class TAO_PSDL_Abstract_Storagetype_Inh_Spec;
00075 class TAO_PSDL_Abstract_Storagetype_Name;
00076 class TAO_PSDL_Psdl_State_Dcl;
00077 class TAO_PSDL_Psdl_State_Type_Spec;
00078 class TAO_PSDL_Abstract_Storagetype_Ref_Type;
00079 class TAO_PSDL_Abstract_Storagehome;
00080 class TAO_PSDL_Abstract_Storagehome_Fwd_Dcl;
00081 class TAO_PSDL_Abstract_Storagehome_Dcl;
00082 class TAO_PSDL_Abstract_Storagehome_Header;
00083 class TAO_PSDL_Abstract_Storagehome_Body;
00084 class TAO_PSDL_Abstract_Storagehome_Member;
00085 class TAO_PSDL_Abstract_Storagehome_Inh_Spec;
00086 class TAO_PSDL_Abstract_Storagehome_Name;
00087 class TAO_PSDL_Local_Op_Dcl;
00088 class TAO_PSDL_Key_Dcl;
00089 class TAO_PSDL_Catalog;
00090 class TAO_PSDL_Catalog_Inh_Spec;
00091 class TAO_PSDL_Catalog_Name;
00092 class TAO_PSDL_Catalog_Body;
00093 class TAO_PSDL_Catalog_Member;
00094 class TAO_PSDL_Provides_Dcl;
00095 class TAO_PSDL_Storagetype;
00096 class TAO_PSDL_Storagetype_Dcl;
00097 class TAO_PSDL_Storagetype_Fwd_Dcl;
00098 class TAO_PSDL_Storagetype_Header;
00099 class TAO_PSDL_Storagetype_Body;
00100 class TAO_PSDL_Storagetype_Member;
00101 class TAO_PSDL_Storagetype_Inh_Spec;
00102 class TAO_PSDL_Storagetype_Name;
00103 class TAO_PSDL_Storagetype_Impl_Spec;
00104 class TAO_PSDL_Storagetype_Ref_Type;
00105 class TAO_PSDL_Storagehome_Scope;
00106 class TAO_PSDL_Store_Directive;
00107 class TAO_PSDL_Psdl_Concrete_State_Type;
00108 class TAO_PSDL_Ref_Rep_Directive;
00109 class TAO_PSDL_Storagehome;
00110 class TAO_PSDL_Storagehome_Header;
00111 class TAO_PSDL_Storagehome_Body;
00112 class TAO_PSDL_Storagehome_Member;
00113 class TAO_PSDL_Storagehome_Inh_Spec;
00114 class TAO_PSDL_Storagehome_Name;
00115 class TAO_PSDL_Storagehome_Impl_Spec;
00116 class TAO_PSDL_Primary_Key_Dcl;
00117 class TAO_PSDL_Identifier;
00118 class TAO_PSDL_Type_Dcl;
00119 class TAO_PSDL_Type_Declarator;
00120 class TAO_PSDL_Type_Spec;
00121 class TAO_PSDL_Simple_Type_Spec;
00122 class TAO_PSDL_Base_Type_Spec;
00123 class TAO_PSDL_Template_Type_Spec;
00124 class TAO_PSDL_Constr_Type_Spec;
00125 class TAO_PSDL_Declarators;
00126 class TAO_PSDL_Declarator;
00127 class TAO_PSDL_Simple_Declarator;
00128 class TAO_PSDL_Simple_Declarator_List;
00129 class TAO_PSDL_Complex_Declarator;
00130 class TAO_PSDL_Predefined_Type;
00131 class TAO_PSDL_Member_List;
00132 class TAO_PSDL_Member;
00133 class TAO_PSDL_Union_Type;
00134 class TAO_PSDL_Switch_Type_Spec;
00135 class TAO_PSDL_Switch_Body;
00136 class TAO_PSDL_Case;
00137 class TAO_PSDL_Case_Label;
00138 class TAO_PSDL_Element_Spec;
00139 class TAO_PSDL_Const_Dcl;
00140 class TAO_PSDL_Const_Type;
00141 class TAO_PSDL_Const_Exp;
00142 class TAO_PSDL_Or_Expr;
00143 class TAO_PSDL_Xor_Expr;
00144 class TAO_PSDL_And_Expr;
00145 class TAO_PSDL_Shift_Expr;
00146 class TAO_PSDL_Add_Expr;
00147 class TAO_PSDL_Mult_Expr;
00148 class TAO_PSDL_Unary_Expr;
00149 class TAO_PSDL_Primary_Expr;
00150 class TAO_PSDL_Except_Dcl;
00151 class TAO_PSDL_Op_Dcl;
00152 class TAO_PSDL_Op_Type_Spec;
00153 class TAO_PSDL_Parameter_Dcls;
00154 class TAO_PSDL_Param_Dcl;
00155 class TAO_PSDL_Raises_Expr;
00156 class TAO_PSDL_Context_Expr;
00157 class TAO_PSDL_Param_Type_Spec;
00158 class TAO_PSDL_Fixed_Pt_Type;
00159 class TAO_PSDL_Constr_Forward_Decl;
00160 class TAO_PSDL_Interface;
00161 class TAO_PSDL_Interface_Body;
00162 class TAO_PSDL_Interface_Dcl;
00163 class TAO_PSDL_Forward_Dcl;
00164 class TAO_PSDL_Interface_Header;
00165 class TAO_PSDL_Export_Dcl;
00166 class TAO_PSDL_Storagetype_Dcl;
00167 class TAO_PSDL_Storagetype_Fwd_Dcl;
00168 class TAO_PSDL_Storagetype_Header;
00169 class TAO_PSDL_Storagetype_Body;
00170 class TAO_PSDL_Interface_Inheritance_Spec;
00171 class TAO_PSDL_Interface_Name;
00172 class TAO_PSDL_Scoped_Name;
00173 class TAO_PSDL_Value;
00174 class TAO_PSDL_Value_Common_Base;
00175 class TAO_PSDL_Value_Forward_Dcl;
00176 class TAO_PSDL_Value_Box_Dcl;
00177 class TAO_PSDL_Value_Abs_Dcl;
00178 class TAO_PSDL_Value_Dcl;
00179 class TAO_PSDL_Value_Header;
00180 class TAO_PSDL_Value_Inheritance_Spec;
00181 class TAO_PSDL_Value_Name;
00182 class TAO_PSDL_Value_Element;
00183 class TAO_PSDL_Enumerator;
00184 class TAO_PSDL_Literal;
00185 class TAO_PSDL_Array_Declarator;
00186 class TAO_PSDL_Fixed_Array_Size;
00187 class TAO_PSDL_State_Member;
00188 class TAO_PSDL_Init_Dcl;
00189 class TAO_PSDL_Init_Param_Decls;
00190 class TAO_PSDL_Init_Param_Decl;
00191 class TAO_PSDL_Factory_Parameters;
00192 class TAO_PSDL_Attr_Dcl;
00193 class TAO_PSDL_Factory_Dcl;
00194 class TAO_PSDL_Positive_Int_Const;
00195 
00196 class TAO_PSDL_Export TAO_PSDL_Node_Visitor
00197 {
00198 public:
00199 
00200   TAO_PSDL_Node_Visitor ();
00201 
00202   // Destructor.
00203   virtual ~TAO_PSDL_Node_Visitor (void);
00204 
00205   // All the nodes in the parse tree are of base type
00206   // TAO_PSDL_Node. Based on the visitor pattern, the following
00207   // methods are invoked depending on the actual type of the node.
00208   // The visitor pattern is being used. And, the return value is a '0'
00209   // when successful and '-1' on a failure.
00210   virtual int visit_specification (TAO_PSDL_Specification *);
00211   virtual int visit_definition (TAO_PSDL_Definition *);
00212   virtual int visit_module (TAO_PSDL_Module *);
00213   virtual int visit_abstract_storagetype (TAO_PSDL_Abstract_Storagetype *);
00214   virtual int visit_abstract_storagetype_dcl (TAO_PSDL_Abstract_Storagetype_Dcl *);
00215   virtual int visit_abstract_storagetype_fwd_dcl (TAO_PSDL_Abstract_Storagetype_Fwd_Dcl *);
00216   virtual int visit_abstract_storagetype_header (TAO_PSDL_Abstract_Storagetype_Header *);
00217   virtual int visit_abstract_storagetype_body (TAO_PSDL_Abstract_Storagetype_Body *);
00218   virtual int visit_abstract_storagetype_member (TAO_PSDL_Abstract_Storagetype_Member *);
00219   virtual int visit_abstract_storagetype_inh_spec (TAO_PSDL_Abstract_Storagetype_Inh_Spec *);
00220   virtual int visit_abstract_storagetype_name (TAO_PSDL_Abstract_Storagetype_Name *);
00221   virtual int visit_psdl_state_dcl (TAO_PSDL_Psdl_State_Dcl *);
00222   virtual int visit_psdl_state_type_spec (TAO_PSDL_Psdl_State_Type_Spec *);
00223 
00224   virtual int visit_abstract_storagetype_ref_type (TAO_PSDL_Abstract_Storagetype_Ref_Type);
00225 
00226   virtual int visit_abstract_storagehome (TAO_PSDL_Abstract_Storagehome *);
00227   virtual int visit_abstract_storagehome_fwd_dcl (TAO_PSDL_Abstract_Storagehome_Fwd_Dcl *);
00228   virtual int visit_abstract_storagehome_dcl (TAO_PSDL_Abstract_Storagehome_Dcl *);
00229 
00230   virtual int visit_abstract_storagehome_header (TAO_PSDL_Abstract_Storagehome_Header *);
00231   virtual int visit_abstract_storagehome_body (TAO_PSDL_Abstract_Storagehome_Body  *);
00232   virtual int visit_abstract_storagehome_member (TAO_PSDL_Abstract_Storagehome_Member *);
00233   virtual int visit_abstract_storagehome_inh_spec (TAO_PSDL_Abstract_Storagehome_Inh_Spec *);
00234   virtual int visit_abstract_storagehome_name (TAO_PSDL_Abstract_Storagehome_Name *);
00235   virtual int visit_local_op_dcl (TAO_PSDL_Local_Op_Dcl *);
00236   virtual int visit_key_dcl (TAO_PSDL_Key_Dcl *);
00237   virtual int visit_catalog (TAO_PSDL_Catalog *);
00238   virtual int visit_catalog_inh_spec (TAO_PSDL_Catalog_Inh_Spec *);
00239   virtual int visit_catalog_name (TAO_PSDL_Catalog_Name *);
00240   virtual int visit_catalog_body (TAO_PSDL_Catalog_Body *);
00241   virtual int visit_catalog_member (TAO_PSDL_Catalog_Member *);
00242   virtual int visit_storagetype_member (TAO_PSDL_Storagetype_Member *);
00243   virtual int visit_storagetype_inh_spec (TAO_PSDL_Storagetype_Inh_Spec *);
00244   virtual int visit_storagetype_name (TAO_PSDL_Storagetype_Name *);
00245   virtual int visit_storagetype_impl_spec (TAO_PSDL_Storagetype_Impl_Spec *);
00246   virtual int visit_storagetype_ref_type (TAO_PSDL_Storagetype_Ref_Type *);
00247   virtual int visit_store_directive (TAO_PSDL_Store_Directive *);
00248   virtual int visit_psdl_concrete_state_type (TAO_PSDL_Psdl_Concrete_State_Type *);
00249   virtual int visit_ref_rep_directive (TAO_PSDL_Ref_Rep_Directive *);
00250   virtual int visit_storagehome (TAO_PSDL_Storagehome *);
00251   virtual int visit_storagehome_header (TAO_PSDL_Storagehome_Header *);
00252   virtual int visit_storagehome_body  (TAO_PSDL_Storagehome_Body *);
00253   virtual int visit_storagehome_member  (TAO_PSDL_Storagehome_Member *);
00254   virtual int visit_storagehome_inh_spec  (TAO_PSDL_Storagehome_Inh_Spec *);
00255   virtual int visit_storagehome_name  (TAO_PSDL_Storagehome_Name *);
00256 
00257   virtual int visit_storagehome_impl_spec (TAO_PSDL_Storagehome_Impl_Spec *);
00258   virtual int visit_primary_key_dcl (TAO_PSDL_Primary_Key_Dcl *);
00259   virtual int visit_identifier (TAO_PSDL_Identifier *);
00260 
00261   virtual int visit_type_dcl (TAO_PSDL_Type_Dcl *);
00262   virtual int visit_type_declarator (TAO_PSDL_Type_Declarator *);
00263   virtual int visit_type_spec (TAO_PSDL_Type_Spec *);
00264   virtual int visit_simple_type_spec  (TAO_PSDL_Simple_Type_Spec *);
00265   virtual int visit_base_type_spec  (TAO_PSDL_Base_Type_Spec *);
00266   virtual int visit_template_type_spec  (TAO_PSDL_Template_Type_Spec *);
00267   virtual int visit_constr_type_spec  (TAO_PSDL_Constr_Type_Spec *);
00268   virtual int visit_declarators  (TAO_PSDL_Declarators *);
00269   virtual int visit_declarator  (TAO_PSDL_Declarator *);
00270   virtual int visit_simple_declarator  (TAO_PSDL_Simple_Declarator *);
00271   virtual int visit_simple_declarator_list  (TAO_PSDL_Simple_Declarator_List *);
00272   virtual int visit_complex_declarator  (TAO_PSDL_Complex_Declarator *);
00273   virtual int visit_predefined_type  (TAO_PSDL_Predefined_Type *);
00274   virtual int visit_member_list (TAO_PSDL_Member_List *);
00275   virtual int visit_member (TAO_PSDL_Member *);
00276   virtual int visit_union_type (TAO_PSDL_Union_Type *);
00277   virtual int visit_switch_type_spec (TAO_PSDL_Switch_Type_Spec *);
00278   virtual int visit_switch_body (TAO_PSDL_Switch_Body *);
00279   virtual int visit_case_case (TAO_PSDL_Case *);
00280   virtual int visit_case_label (TAO_PSDL_Case_Label *);
00281   virtual int visit_element_spec (TAO_PSDL_Element_Spec *);
00282   virtual int visit_const_dcl (TAO_PSDL_Const_Dcl *);
00283   virtual int visit_const_type (TAO_PSDL_Const_Type *);
00284   virtual int visit_const_exp (TAO_PSDL_Const_Exp *);
00285   virtual int visit_or_expr (TAO_PSDL_Or_Expr *);
00286   virtual int visit_xor_expr (TAO_PSDL_Xor_Expr *);
00287   virtual int visit_and_expr (TAO_PSDL_And_Expr *);
00288   virtual int visit_shift_expr (TAO_PSDL_Shift_Expr *);
00289   virtual int visit_add_expr (TAO_PSDL_Add_Expr *);
00290   virtual int visit_mult_expr (TAO_PSDL_Mult_Expr *);
00291   virtual int visit_unary_expr (TAO_PSDL_Unary_Expr *);
00292   virtual int visit_primary_expr (TAO_PSDL_Primary_Expr *);
00293   virtual int visit_except_dcl (TAO_PSDL_Except_Dcl *);
00294   virtual int visit_op_dcl (TAO_PSDL_Op_Dcl *);
00295   virtual int visit_storagetype (TAO_PSDL_Storagetype *);
00296   virtual int visit_storagetype_dcl (TAO_PSDL_Storagetype_Dcl *);
00297   virtual int visit_storagetype_fwd_dcl (TAO_PSDL_Storagetype_Fwd_Dcl *);
00298   virtual int visit_storagetype_header (TAO_PSDL_Storagetype_Header *);
00299   virtual int visit_storagetype_body (TAO_PSDL_Storagetype_Body *);
00300   virtual int visit_storagehome_scope (TAO_PSDL_Storagehome_Scope *);
00301   virtual int visit_provides_dcl (TAO_PSDL_Provides_Dcl *);
00302   virtual int visit_op_type_spec (TAO_PSDL_Op_Type_Spec *);
00303   virtual int visit_parameter_dcls (TAO_PSDL_Parameter_Dcls *);
00304   virtual int visit_param_dcl (TAO_PSDL_Param_Dcl *);
00305   virtual int visit_raises_expr (TAO_PSDL_Raises_Expr *);
00306   virtual int visit_context_expr (TAO_PSDL_Context_Expr *);
00307   virtual int visit_param_type_spec (TAO_PSDL_Param_Type_Spec *);
00308   virtual int visit_fixed_pt_type (TAO_PSDL_Fixed_Pt_Type *);
00309   virtual int visit_constr_forward_decl (TAO_PSDL_Constr_Forward_Decl *);
00310   virtual int visit_interface (TAO_PSDL_Interface *);
00311   virtual int visit_interface_body (TAO_PSDL_Interface_Body *);
00312   virtual int visit_interface_dcl (TAO_PSDL_Interface_Dcl *);
00313   virtual int visit_forward_dcl (TAO_PSDL_Forward_Dcl *);
00314   virtual int visit_interface_header (TAO_PSDL_Interface_Header *);
00315   virtual int visit_export_dcl (TAO_PSDL_Export_Dcl *);
00316   virtual int visit_interface_inheritance_spec (TAO_PSDL_Interface_Inheritance_Spec *);
00317   virtual int visit_interface_name (TAO_PSDL_Interface_Name *);
00318   virtual int visit_scoped_name (TAO_PSDL_Scoped_Name *);
00319   virtual int visit_value (TAO_PSDL_Value *);
00320   virtual int visit_value_common_base (TAO_PSDL_Value_Common_Base *);
00321   virtual int visit_value_forward_dcl (TAO_PSDL_Value_Forward_Dcl *);
00322   virtual int visit_value_box_dcl (TAO_PSDL_Value_Box_Dcl *);
00323   virtual int visit_value_abs_dcl (TAO_PSDL_Value_Abs_Dcl *);
00324   virtual int visit_value_dcl (TAO_PSDL_Value_Dcl *);
00325   virtual int visit_value_header (TAO_PSDL_Value_Header *);
00326   virtual int visit_value_inheritance_spec (TAO_PSDL_Value_Inheritance_Spec *);
00327   virtual int visit_value_name (TAO_PSDL_Value_Name *);
00328   virtual int visit_value_element (TAO_PSDL_Value_Element *);
00329   virtual int visit_array_declarator (TAO_PSDL_Array_Declarator *);
00330   virtual int visit_fixed_array_size (TAO_PSDL_Fixed_Array_Size *);
00331   virtual int visit_enumerator (TAO_PSDL_Enumerator *);
00332   virtual int visit_literal (TAO_PSDL_Literal *);
00333   virtual int visit_state_member (TAO_PSDL_State_Member *);
00334   virtual int visit_init_dcl (TAO_PSDL_Init_Dcl *);
00335   virtual int visit_init_param_decls (TAO_PSDL_Init_Param_Decls *);
00336   virtual int visit_init_param_decl (TAO_PSDL_Init_Param_Decl *);
00337   virtual int visit_factory_parameters (TAO_PSDL_Factory_Parameters *);
00338   virtual int visit_attr_dcl (TAO_PSDL_Attr_Dcl *);
00339   virtual int visit_factory_dcl (TAO_PSDL_Factory_Dcl *);
00340   virtual int visit_positive_int_const (TAO_PSDL_Positive_Int_Const *);
00341 
00342   /// To check if the identifier_type is a predefined type or one that
00343   /// is defined in the idl in case.
00344   virtual int base_type (const ACE_CString &identifier_name,
00345                          ACE_CString &identifier_type);
00346 
00347   virtual ACE_CString version_for_stub (ACE_CString identifier_type);
00348 
00349   // Generate the code that should go into the stub implementation
00350   // file for the type_declarators.
00351   virtual void gen_code_for_si (void);
00352 
00353   // Generate the code that should go into the stub inline
00354   // file for the type_declarators.
00355   virtual void gen_code_for_sinline (void);
00356 
00357 protected:
00358 
00359   // identifiers_ and predefined_type_ is used to store the temporary
00360   // values while building ASTs.
00361   ACE_Array_Base <ACE_CString> identifiers_;
00362   ACE_Array_Base <CORBA::ULong> predefined_type_;
00363   CORBA::ULong count_;
00364   TAO_PSDL_Node_Visitor *node_visitor_;
00365   TAO_PSDL_Visitor_Factory *visitor_factory_;
00366 };
00367 
00368 #endif /* TAO_PSDL_NODE_VISITOR_H */

Generated on Thu Nov 9 14:07:04 2006 for TAO_PSS by doxygen 1.3.6