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 #ifndef lestes__lang__cplus__syn__hinter_hh__included
00029 #define lestes__lang__cplus__syn__hinter_hh__included
00030
00031 #include <lestes/common.hh>
00032 #include <lestes/lang/cplus/syn/token.hh>
00033
00034 #include <map>
00035
00036 package(lestes);
00037 package(lang);
00038 package(cplus);
00039 package(sem);
00040 class ss_decl_seq;
00041 end_package(sem);
00042 package(syn);
00043
00044
00045 class elab_spec_key;
00046
00047 class hinter {
00048 public:
00049
00050 enum mode_type {
00051 HINTER_NORMAL,
00052 HINTER_CHECK,
00053
00054 HINTER_USER,
00055 HINTER_OFF
00056 };
00057
00058
00059
00060 static ptr<bison_token> hint( const ptr<bison_token> & t,
00061 const ptr<bison_token> & lookahead );
00062
00063
00064 static void init( mode_type );
00065 static mode_type mode_get();
00066
00067
00068 static void qual_scope_set( const ptr< ::lestes::lang::cplus::sem::ss_decl_seq > & );
00069 static void elab_spec_set( const ptr<elab_spec_key> & );
00070
00071 static void namespace_mode_set( bool );
00072
00073 static void qual_scope_set_root();
00074 protected:
00075
00076 static ::std::map<bison_token::hint_type,bison_token::yytokentype> id_hint2tok_type_map;
00077
00078
00079 static ptr< ::lestes::lang::cplus::sem::ss_decl_seq > qual_scope_get();
00080 static ptr<elab_spec_key> elab_spec_get();
00081
00082 static bool namespace_mode_get();
00083
00084 static ptr<bison_token> use_user_hint( const ptr<bison_token> & t );
00085 static ptr<bison_token> compute_hint( const ptr<bison_token> & t,
00086 const ptr<bison_token> & lookahead );
00087 private:
00088
00089 hinter();
00090
00091 hinter( const hinter & );
00092
00093 static mode_type mode;
00094 };
00095
00096 end_package(syn);
00097 end_package(cplus);
00098 end_package(lang);
00099 end_package(lestes);
00100
00101 #endif // lestes__lang__cplus__syn__hinter_hh__included