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__lex___token_sequence_hh___included
00029 #define lestes__lang__cplus__lex___token_sequence_hh___included
00030
00031
00032
00033
00034
00035
00036 #include <lestes/common.hh>
00037 #include <lestes/std/list.hh>
00038 #include <lestes/lang/cplus/lex/token_input.hh>
00039 #include <iosfwd>
00040
00041 package(lestes);
00042
00043 package(std);
00044
00045 class source_location;
00046 end_package(std);
00047
00048 package(lang);
00049 package(cplus);
00050 package(lex);
00051
00052
00053 class pp_token;
00054 class macro;
00055 class macro_storage;
00056 class taboo_macros;
00057
00058
00059
00060
00061 class token_sequence: public token_input {
00062 private:
00063
00064 typedef ::lestes::std::list< srp<pp_token> > sequence_type;
00065 public:
00066
00067
00068
00069
00070 typedef sequence_type::size_type size_type;
00071
00072 ptr<pp_token> read(void);
00073
00074 ptr<pp_token> peek_front(void);
00075
00076 ptr<pp_token> peek_back(void);
00077
00078 ptr<pp_token> read_front(void);
00079
00080 ptr<pp_token> read_front_skip_ws(void);
00081
00082 ptr<pp_token> read_back(void);
00083
00084 ptr<pp_token> read_back_skip_ws(void);
00085
00086 bool skip_front_ws(void);
00087
00088 bool skip_back_ws(void);
00089
00090 void add_back(const ptr<pp_token> &t);
00091
00092 void prepend(const ptr<token_sequence> &ts);
00093
00094 void append(const ptr<token_sequence> &inserted);
00095
00096 void taboo_extend(
00097 const ptr<taboo_macros> &tm, const ptr<macro_storage> ¯os);
00098
00099 ptr<token_sequence> expand_all(const ptr<macro_storage> ¯os);
00100
00101 ptr<token_sequence> clone(void) const;
00102
00103 ptr<token_sequence> clone(const ptr<source_location> &a_location) const;
00104
00105 size_type length(void) const;
00106
00107 bool equals(const ptr<token_sequence> &other) const;
00108
00109 bool congruent(const ptr<token_sequence> &other) const;
00110
00111 void debug_print(::std::ostream &o) const;
00112
00113 static ptr<token_sequence> create(void);
00114 protected:
00115
00116 token_sequence(void);
00117
00118 virtual void gc_mark(void);
00119 private:
00120
00121 friend class token_stream;
00122
00123 srp<sequence_type> sequence;
00124 };
00125
00126
00127 ::std::ostream &operator<<(::std::ostream &o, const ptr<token_sequence> &ts);
00128
00129 end_package(lex);
00130 end_package(cplus);
00131 end_package(lang);
00132 end_package(lestes);
00133 #endif
00134