ct_common  1.0.1
Common library for combinatorial testing
src/ct_common/file_parse/ct_lexer.hpp
Go to the documentation of this file.
00001 /* -*- C++ -*-   vim: set syntax=cpp:
00002  * CONTENT: 
00003  *
00004  * (1) Includes for required standard headers.
00005  * (2) Definitions of options and settings for the particular application.
00006  * (3) #include <quex/code_base/definitions> for default settings.
00007  * (4) Lexical Analyzer class lexer and its memento class.
00008  * (5) Constructor and init core of lexer.
00009  * (6) Memento pack and unpack functions.
00010  *
00011  * File content generated by Quex 0.62.6.
00012  *
00013  * (C) 2005-2012 Frank-Rene Schaefer
00014  * ABSOLUTELY NO WARRANTY                                                      */
00015 #ifndef __QUEX_INCLUDE_GUARD__ANALYZER__GENERATED____CT____LEXER
00016 #define __QUEX_INCLUDE_GUARD__ANALYZER__GENERATED____CT____LEXER
00017 
00018 #ifdef      __QUEX_INCLUDE_INDICATOR__ANALYZER__MAIN
00019     /* In case that multiple lexical analyzers are used the same header
00020      * files are compiled with a different setting of the macros. The
00021      * undef of the include guards happens in the following file.              */
00022 #   ifdef   __QUEX_SIGNAL_DEFINED_LEXER_IN_NAMESPACE___CT__
00023 #      error "More than one lexical analyzer have been generated in the same name space. Read documentation on command line option '-o'."
00024 #   endif
00025 #   include <quex/code_base/include-guard-undef>
00026 #   include <quex/code_base/analyzer/member/token-sending-undef.i>
00027 #   undef   __QUEX_INCLUDE_GUARD__ANALYZER__CONFIGURATION____CT____LEXER
00028 #else
00029 #   define  __QUEX_INCLUDE_INDICATOR__ANALYZER__MAIN
00030 #endif
00031 #define     __QUEX_SIGNAL_DEFINED_LEXER_IN_NAMESPACE___CT__
00032 
00033 #include "ct_lexer-configuration.hpp"
00034 
00035 #include <quex/code_base/definitions>
00036 
00037 QUEX_NAMESPACE_MAIN_OPEN 
00038     struct QUEX_NAME(Engine_tag);
00039     struct QUEX_NAME(Memento_tag);
00040     
00041     class  QUEX_TYPE0_ANALYZER;    /* lexer */
00042     typedef __QUEX_TYPE_ANALYZER_RETURN_VALUE  (*QUEX_NAME(AnalyzerFunctionP))(QUEX_TYPE_ANALYZER*);
00043 QUEX_NAMESPACE_MAIN_CLOSE
00044 
00045 /* Token Class Declaration must preceed the user's header, so that the user
00046  * can refer to it at ease.                                                    */
00047 QUEX_NAMESPACE_TOKEN_OPEN
00048     class  QUEX_TYPE0_TOKEN;
00049 QUEX_NAMESPACE_TOKEN_CLOSE
00050 
00051 /* START: User defined header content _________________________________________
00052  *        Must come before token class definition, since the token class 
00053  *        might rely on contents of the header.                                */
00054 
00055 #   line 13 "ct_lexer.qx"
00056 
00057 #include <ct_common/file_parse/ct_parser.tab.hpp>
00058 #include <ct_common/common/utils.h>
00059 QUEX_NAMESPACE_MAIN_OPEN 
00060 class DLL_EXPORT ct_lexer;
00061 class DLL_EXPORT ct_lexer_Token;
00062 QUEX_NAMESPACE_MAIN_CLOSE
00063 
00064 #   line 65 "ct_lexer.hpp"
00065 
00066 
00067 /* END: _______________________________________________________________________*/
00068 
00069 #if defined(__QUEX_OPTION_CONVERTER_HELPER)
00070 #   include "quex/code_base/converter_helper/from-unicode-buffer"
00071 #endif
00072 #include <quex/code_base/analyzer/headers>
00073 
00074 #include "ct_lexer-token_ids.h"
00075 #include "ct_lexer-token.hpp"
00076 
00077 QUEX_NAMESPACE_MAIN_OPEN 
00078 
00079 enum {
00080     QUEX_NAME(ModeID_NORMAL) = 0
00081 };
00082 
00083         extern QUEX_NAME(Mode)  QUEX_NAME(NORMAL);
00084 
00085 
00086 extern     __QUEX_TYPE_ANALYZER_RETURN_VALUE QUEX_NAME(NORMAL_analyzer_function)(QUEX_TYPE_ANALYZER*);
00087 #ifdef QUEX_OPTION_RUNTIME_MODE_TRANSITION_CHECK
00088 extern     bool QUEX_NAME(NORMAL_has_base)(const QUEX_NAME(Mode)*);
00089 extern     bool QUEX_NAME(NORMAL_has_entry_from)(const QUEX_NAME(Mode)*);
00090 extern     bool QUEX_NAME(NORMAL_has_exit_to)(const QUEX_NAME(Mode)*);
00091 #endif
00092 
00093 
00094 
00095 typedef struct QUEX_NAME(Memento_tag) {
00096 #   include <quex/code_base/analyzer/EngineMemento_body>
00097 
00098     QUEX_NAME(Memento_tag)()  {}  /* Con- and Destruction necessary to trigger */
00099     ~QUEX_NAME(Memento_tag)() {}  /* con- and destruction of user members.     */
00100 
00101 /* START: User's memento extentions ___________________________________________*/
00102 
00103 /* END: _______________________________________________________________________*/
00104 } QUEX_NAME(Memento);
00105 
00106 QUEX_NAMESPACE_MAIN_CLOSE 
00107 
00108 #include <quex/code_base/temporary_macros_on>
00109 
00110 QUEX_NAMESPACE_MAIN_OPEN 
00111 
00112 class lexer {
00113 public:
00114 #   include <quex/code_base/analyzer/Engine_body>
00115 
00116     /* DISABLED */ lexer(const lexer&);
00117 public:
00118     typedef QUEX_TYPE_TOKEN      token_type;
00119     typedef QUEX_TYPE_TOKEN_ID   token_id_type;
00120     typedef QUEX_TYPE_CHARACTER  char_type;
00121 
00122     lexer(QUEX_TYPE_CHARACTER* BufferMemoryBegin, size_t  BufferMemorySize,
00123           QUEX_TYPE_CHARACTER* BufferEndOfContentP   = 0x0,
00124           const char*          CharacterEncodingName = 0x0,
00125           bool                 ByteOrderReversionF   = false);
00126     lexer(const std::string&   Filename,       
00127           const char*          CharacterEncodingName = 0x0,
00128           bool                 ByteOrderReversionF   = false);
00129     lexer(std::istream*        p_input_stream, 
00130           const char*          CharacterEncodingName = 0x0,
00131           bool                 ByteOrderReversionF   = false);
00132 #   if defined(__QUEX_OPTION_WCHAR_T)
00133     lexer(std::wistream*       p_input_stream,
00134           const char*          CharacterEncodingName = 0x0,
00135           bool                 ByteOrderReversionF   = false);
00136 #   endif
00137     lexer(std::FILE*           input_fh,       
00138           const char*          CharacterEncodingName = 0x0,
00139           bool                 ByteOrderReversionF   = false);
00140 #   if defined(__QUEX_OPTION_UNIT_TEST)
00141     template <class UnderlyingStreamT>
00142         lexer(quex::StrangeStream<UnderlyingStreamT>*  p_input_stream, 
00143               const char*                              CharacterEncodingName = 0x0,
00144               bool                                     ByteOrderReversionF   = false);
00145 #   endif
00146 
00147     virtual ~lexer();
00148 
00149     /* Direct Access to Memory */
00150     void*                 buffer_fill_region_append(void* ContentBegin, 
00151                                                     void* ContentEnd);
00152     void*                 buffer_fill_region_append_conversion(void* ContentBegin, 
00153                                                                void* ContentEnd);
00154     void*                 buffer_fill_region_append_conversion_direct(void* ContentBegin, 
00155                                                                       void* ContentEnd);
00156     void                  buffer_fill_region_prepare();
00157     QUEX_TYPE_CHARACTER*  buffer_fill_region_begin();
00158     QUEX_TYPE_CHARACTER*  buffer_fill_region_end();
00159     size_t                buffer_fill_region_size();
00160     void                  buffer_fill_region_finish(const size_t LoadedN);
00161     void                  buffer_conversion_fill_region_prepare(); 
00162     uint8_t*              buffer_conversion_fill_region_begin();
00163     uint8_t*              buffer_conversion_fill_region_end();
00164     size_t                buffer_conversion_fill_region_size();
00165     void                  buffer_conversion_fill_region_finish(const size_t  ByteN);
00166     QUEX_TYPE_CHARACTER*  buffer_lexeme_start_pointer_get();
00167     void                  buffer_input_pointer_set(QUEX_TYPE_CHARACTER*);
00168 
00169     /* -- activate/deactivate byte order reversion (big-/little-endian)    */
00170     bool                  byte_order_reversion();
00171     void                  byte_order_reversion_set(bool Value);
00172 
00173     /* NOTE: All calls to receive functions for 'queue' and 'single'
00174      *       are deliberately chosen to be incompatible! Thus, when 
00175      *       the user switches the token passing policy, he must re-
00176      *       think his receive mechanism.                                  */
00177 #   if defined(QUEX_OPTION_TOKEN_POLICY_QUEUE)
00178     /* (1) Token Queue 
00179      * 
00180      *   When using a token queue, the pointer **must** be adapted.
00181      *   Otherwise, very strange results may occur. Force the user to
00182      *   provide a pointer that can be adapted by having him specify
00183      *   the second argument--not only a return value.
00184      *
00185      *   Command line option:  --token-policy  queue                       */
00186     void                receive(QUEX_TYPE_TOKEN**);
00187 #   elif defined(QUEX_OPTION_TOKEN_POLICY_SINGLE)  
00188     /* (2) Single Token
00189      * 
00190      *   When there is only one single token as interface, than the
00191      *   token id is returned. This enables a minimal setup were the
00192      *   analyzer may only return a token id and does not work on tokens. 
00193      *
00194      *   Command line options: --token-policy  single                      */
00195     QUEX_TYPE_TOKEN_ID  receive();
00196 #   else
00197 #       error "This section should never be compiled."
00198 #   endif
00199 
00200     // NOTE: A pointer to an object of the token queue/object is used in order to make
00201     //       memory management more flexible. The token queue/token object is heavily
00202     //       used and it should be possible to put it somewhere in memory with other
00203     //       heavily used data so that the cache can take advantage of data locality.
00204     QUEX_TYPE_TOKEN*     token_p();
00205 
00206 #   if defined(QUEX_OPTION_TOKEN_POLICY_SINGLE) 
00207 #      if defined(QUEX_OPTION_USER_MANAGED_TOKEN_MEMORY)
00208        void              token_p_set(QUEX_TYPE_TOKEN*);
00209        QUEX_TYPE_TOKEN*  token_p_switch(QUEX_TYPE_TOKEN*);
00210 #      endif
00211 #   else
00212        bool              token_queue_is_empty();
00213        void              token_queue_remainder_get(QUEX_TYPE_TOKEN** begin, QUEX_TYPE_TOKEN** end);
00214 #      if defined(QUEX_OPTION_USER_MANAGED_TOKEN_MEMORY)
00215        void              token_queue_get(QUEX_TYPE_TOKEN** begin, size_t* size);
00216        void              token_queue_set(QUEX_TYPE_TOKEN* Begin, size_t Size);
00217        void              token_queue_switch(QUEX_TYPE_TOKEN** queue, 
00218                                             size_t*           size); 
00219 #      endif
00220 #   endif
00221 
00222     //
00223     // (*) Mode handling
00224     //
00225     //     -- modes: read access
00226     QUEX_NAME(Mode)&      mode();
00227     int                   mode_id() const;
00228     const char*           mode_name() const;
00229     //
00230     //     -- modes: changing lexical analysis mode
00231     void        set_mode_brutally(const int       LexerMode);
00232     void        set_mode_brutally(const QUEX_NAME(Mode)& Mode);
00233     //
00234     void        operator<<(const int MODE_ID);               
00235     void        operator<<(/* NOT const*/ QUEX_NAME(Mode)& Mode);  
00236     //
00237     void        pop_mode();
00238     void        pop_drop_mode();
00239     void        push_mode(QUEX_NAME(Mode)& new_mode);
00240     //
00241     void        enter_mode(/* NOT const*/ QUEX_NAME(Mode)& TargetMode);
00242     //
00243     //     -- map: mode id to mode and vice versa
00244     QUEX_NAME(Mode)&   map_mode_id_to_mode(const int              ModeID);       
00245     int                map_mode_to_mode_id(const QUEX_NAME(Mode)& Mode) const;
00246 
00247     // (*) Token sending happens only via 'self_send*(...)' macros
00248     void        send(const QUEX_TYPE_TOKEN_ID TokenID)
00249     { (void)TokenID; QUEX_ERROR_DEPRECATED("Member functions .send()", "macros: self_send*()"); }
00250 
00251 #   ifdef  QUEX_OPTION_LINE_NUMBER_COUNTING
00252     size_t      line_number() const             { return line_number_at_begin(); }
00253     size_t      line_number_at_begin() const    { return counter._line_number_at_begin; }
00254     size_t      line_number_at_end() const      { return counter._line_number_at_end; }
00255     /*          line_number_set(...) defines the column number of the next pattern match. */
00256     void        line_number_set(size_t Y)       { counter._line_number_at_end = Y; }
00257 #   endif
00258 #   ifdef  QUEX_OPTION_COLUMN_NUMBER_COUNTING
00259     size_t      column_number() const             { return column_number_at_begin(); }
00260     size_t      column_number_at_begin() const    { return counter._column_number_at_begin; }
00261     size_t      column_number_at_end() const      { return counter._column_number_at_end; }
00262     /*          column_number_set(...) defines the column number of the next pattern match. */
00263     void        column_number_set(size_t X)       { counter._column_number_at_end = X; }
00264 #   endif
00265 #   ifdef   QUEX_OPTION_INDENTATION_TRIGGER
00266     size_t      indentation()                    { return counter._indentation; }
00267 #   endif
00268 
00269     // (*) Version information
00270     const char* version() const; // created by quex for version/date information
00271 
00272     // (*) Tell/Seek/Move on basis of character index
00273     size_t  tell();
00274     void    seek(const size_t);
00275     void    seek_forward(const size_t);
00276     void    seek_backward(const size_t);
00277 
00278     void    undo();
00279     void    undo(size_t DeltaN_Backward);
00280 
00281     void    move_forward(const size_t) { QUEX_ERROR_EXIT("'move_forward()' has been renamed to 'seek_forward()'."); }
00282     void    move_backward(const size_t){ QUEX_ERROR_EXIT("'move_backward()' has been renamed to 'seek_backward()'."); }
00283 
00284 public:
00285 
00286     void        set_callback_on_buffer_content_change(void (*callback)(QUEX_TYPE_CHARACTER*, 
00287                                                                        QUEX_TYPE_CHARACTER*));
00288 
00289     template <class InputHandleT> void reset(InputHandleT*  input_handle, 
00290                                              const char*    CharacterEncodingName = 0x0);
00291     void                               reset(const char*    CharacterEncodingName = 0x0) 
00292     { reset<void>((void*)0x0, CharacterEncodingName); }
00293 
00294     QUEX_TYPE_CHARACTER*               reset_buffer(QUEX_TYPE_CHARACTER* BufferMemoryBegin, 
00295                                                     size_t               BufferMemorySize,
00296                                                     QUEX_TYPE_CHARACTER* BufferEndOfContentP,  
00297                                                     const char*          CharacterEncodingName = 0x0);
00298 
00299 #   ifdef QUEX_OPTION_INCLUDE_STACK
00300 public:
00301     template<class InputHandleT> void  include_push(QUEX_TYPE_CHARACTER*     InputName, 
00302                                                     const QUEX_NAME(Mode)*   Mode            = 0x0, 
00303                                                     const char*              IANA_CodingName = 0x0);
00304     template<class InputHandleT> void  include_push(InputHandleT*            sh, 
00305                                                     const QUEX_NAME(Mode)*   Mode            = 0x0, 
00306                                                     const char*              IANA_CodingName = 0x0);
00307     bool                               include_pop();
00308 
00309 protected:
00310     void                               include_stack_delete();
00311 
00312 private:
00313 #   endif
00314 
00315 public:
00316     void  print_this();
00317 
00318 private:
00319     // (*) Common core of all constructors ___________________________________________
00320     TEMPLATE_IN(InputHandleT) friend void
00321     QUEX_NAME(constructor_core)(QUEX_TYPE_ANALYZER*       me,
00322                                 InputHandleT*             input_handle, 
00323                                 const char*               CharacterEncodingName,
00324                                 bool                      ByteOrderReversionF,
00325                                 QUEX_TYPE_CHARACTER*      BufferMemory,    
00326                                 size_t                    BufferMemorySize);
00327 
00328     template<class InputHandleT> friend QUEX_NAME(Memento)*
00329     QUEX_NAME(memento_pack)(QUEX_TYPE_ANALYZER*, QUEX_TYPE_CHARACTER*, 
00330                             InputHandleT**);
00331     friend void
00332     QUEX_NAME(memento_unpack)(QUEX_TYPE_ANALYZER*, QUEX_NAME(Memento)*);
00333 
00334     template<class InputHandleT> friend void
00335     QUEX_NAME(reset)(QUEX_TYPE_ANALYZER*, InputHandleT*, const char*);
00336 
00337     /* (*) All Modes are Friends ___________________________________________________*/
00338     friend     __QUEX_TYPE_ANALYZER_RETURN_VALUE QUEX_NAME(NORMAL_analyzer_function)(QUEX_TYPE_ANALYZER*);
00339 #ifdef QUEX_OPTION_RUNTIME_MODE_TRANSITION_CHECK
00340     friend     bool QUEX_NAME(NORMAL_has_base)(const QUEX_NAME(Mode)*);
00341     friend     bool QUEX_NAME(NORMAL_has_entry_from)(const QUEX_NAME(Mode)*);
00342     friend     bool QUEX_NAME(NORMAL_has_exit_to)(const QUEX_NAME(Mode)*);
00343 #endif
00344 
00345   
00346 
00347 public:
00348 #define self  (*(QUEX_TYPE_DERIVED_ANALYZER*)this)
00349 /* START: User's class body extensions _____________________________________________*/
00350 
00351 /* END: ____________________________________________________________________________*/
00352 #undef  self
00353 
00354 public:
00355     // At least warn those, who still use the old interface ...
00356     void                  get_token() 
00357     { QUEX_ERROR_DEPRECATED("Member functions .get_token()", ".receive(...)"); }
00358     void                  get_token(QUEX_TYPE_TOKEN*   result_p)  { (void)result_p; get_token(); }
00359     void                  get_token(QUEX_TYPE_TOKEN**  result_pp) { (void)result_pp; get_token(); }
00360 };
00361 
00362 QUEX_NAMESPACE_MAIN_CLOSE
00363 #include <quex/code_base/temporary_macros_off>
00364 
00365 #include <quex/code_base/temporary_macros_on>
00366 
00367 QUEX_NAMESPACE_MAIN_OPEN
00368 
00369 #ifndef __QUEX_OPTION_PLAIN_C
00370 TEMPLATE_IN(InputHandleT)
00371 #endif
00372 void
00373 QUEX_NAME(constructor_core)(QUEX_TYPE_ANALYZER*    me,
00374                             InputHandleT*          input_handle, 
00375                             const char*            CharacterEncodingName,
00376                             bool                   ByteOrderReversionF,
00377                             QUEX_TYPE_CHARACTER*   BufferMemory,    
00378                             size_t                 BufferMemorySize,
00379                             QUEX_TYPE_CHARACTER*   BufferEndOfFileP)
00380 {
00381     __quex_assert(QUEX_NAME(ModeID_NORMAL) < 1);
00382 
00383      QUEX_NAME(NORMAL).id   = QUEX_NAME(ModeID_NORMAL);
00384      QUEX_NAME(NORMAL).name = "NORMAL";
00385      QUEX_NAME(NORMAL).analyzer_function = QUEX_NAME(NORMAL_analyzer_function);
00386 #    if      defined(QUEX_OPTION_INDENTATION_TRIGGER) \
00387         && ! defined(QUEX_OPTION_INDENTATION_DEFAULT_HANDLER)
00388      QUEX_NAME(NORMAL).on_indentation = QUEX_NAME(Mode_on_indentation_null_function);
00389 #    endif
00390      QUEX_NAME(NORMAL).on_entry       = QUEX_NAME(Mode_on_entry_exit_null_function);
00391      QUEX_NAME(NORMAL).on_exit        = QUEX_NAME(Mode_on_entry_exit_null_function);
00392 #    if      defined(QUEX_OPTION_RUNTIME_MODE_TRANSITION_CHECK)
00393      QUEX_NAME(NORMAL).has_base       = QUEX_NAME(NORMAL_has_base);
00394      QUEX_NAME(NORMAL).has_entry_from = QUEX_NAME(NORMAL_has_entry_from);
00395      QUEX_NAME(NORMAL).has_exit_to    = QUEX_NAME(NORMAL_has_exit_to);
00396 #    endif
00397         me->mode_db[QUEX_NAME(ModeID_NORMAL)] = &(QUEX_NAME(NORMAL));
00398 
00399 
00400     QUEX_NAME(construct_basic)(me, input_handle,
00401                                BufferMemory, BufferMemorySize, BufferEndOfFileP,
00402                                CharacterEncodingName, 
00403                                QUEX_SETTING_TRANSLATION_BUFFER_SIZE,
00404                                ByteOrderReversionF);
00405 
00406     me->__current_mode_p = 0x0; /* REQUIRED, for mode transition check */
00407     QUEX_NAME(set_mode_brutally_by_id)(me, __QUEX_SETTING_INITIAL_LEXER_MODE_ID);
00408 
00409 #define self  (*(QUEX_TYPE_DERIVED_ANALYZER*)me)
00410 /* START: User's constructor extensions _______________________________________*/
00411 
00412 /* END: _______________________________________________________________________*/
00413 #undef self
00414 }
00415 
00416 
00417 #ifdef QUEX_OPTION_INCLUDE_STACK
00418 
00419 #ifndef __QUEX_OPTION_PLAIN_C
00420 TEMPLATE_IN(InputHandleT)
00421 #endif
00422 QUEX_NAME(Memento)*
00423 QUEX_NAME(memento_pack)(QUEX_TYPE_ANALYZER*   me, 
00424                         QUEX_TYPE_CHARACTER*  InputName, 
00425                         InputHandleT**        input_handle)
00426 {
00427 #   define self  (*me)
00428     QUEX_NAME(Memento)* memento = QUEX_NAME(MemoryManager_Memento_allocate)();
00429     
00430     (void)InputName;
00431     (void)input_handle;
00432 
00433 #   ifndef __QUEX_OPTION_PLAIN_C
00434     /* Use placement 'new' for explicit call of constructor. 
00435      * Necessary in C++: Trigger call to constructor for user defined members.   */
00436     new ((void*)memento) QUEX_NAME(Memento);
00437 #   endif
00438 
00439     memento->_parent_memento                  = self._parent_memento;
00440     memento->buffer                           = self.buffer;
00441     memento->__current_mode_p                 = self.__current_mode_p; 
00442     memento->current_analyzer_function        = self.current_analyzer_function;
00443 #   if    defined(QUEX_OPTION_AUTOMATIC_ANALYSIS_CONTINUATION_ON_MODE_CHANGE) \
00444        || defined(QUEX_OPTION_ASSERTS)
00445     memento->DEBUG_analyzer_function_at_entry = self.DEBUG_analyzer_function_at_entry;
00446 #   endif
00447     __QUEX_IF_COUNT( memento->counter         = self.counter);
00448 #   ifdef QUEX_OPTION_STRING_ACCUMULATOR
00449     memento->accumulator                      = self.accumulator;
00450 #   endif
00451     memento->__file_handle_allocated_by_constructor = self.__file_handle_allocated_by_constructor;
00452 
00453     /* Deriberately not subject to include handling:
00454      *    -- Mode stack.
00455      *    -- Token and token queues.
00456      *    -- Post categorizer.                                                 */
00457 
00458 #   ifdef QUEX_OPTION_TOKEN_POLICY_QUEUE
00459     /* QuexTokenQueueRemainder_restore(&memento->token_queue_remainder, &self._token_queue); */
00460 #   endif
00461 
00462 /* START: User's memento 'pack' _______________________________________________*/
00463 
00464 /* END: _______________________________________________________________________*/
00465 
00466     return memento;
00467 #   undef self
00468 }
00469 
00470 #ifndef __QUEX_OPTION_PLAIN_C
00471 QUEX_INLINE 
00472 #endif
00473 void
00474 QUEX_NAME(memento_unpack)(QUEX_TYPE_ANALYZER*  me, 
00475                           QUEX_NAME(Memento)*  memento)
00476 {
00477 #   define self  (*me)
00478     self._parent_memento                  = memento->_parent_memento;
00479     self.buffer                           = memento->buffer;
00480     self.__current_mode_p                 = memento->__current_mode_p; 
00481     self.current_analyzer_function        = memento->current_analyzer_function;
00482 #   if    defined(QUEX_OPTION_AUTOMATIC_ANALYSIS_CONTINUATION_ON_MODE_CHANGE) \
00483        || defined(QUEX_OPTION_ASSERTS)
00484     self.DEBUG_analyzer_function_at_entry = memento->DEBUG_analyzer_function_at_entry;
00485 #   endif
00486     __QUEX_IF_COUNT(self.counter          = memento->counter);
00487 #   ifdef QUEX_OPTION_STRING_ACCUMULATOR
00488     self.accumulator                      = memento->accumulator;
00489 #   endif
00490     self.__file_handle_allocated_by_constructor = memento->__file_handle_allocated_by_constructor;
00491 
00492 #   ifdef QUEX_OPTION_TOKEN_POLICY_QUEUE
00493     /* QuexTokenQueueRemainder_restore(&memento->token_queue_remainder, &self._token_queue); */
00494 #   endif
00495 
00496 /* START: User's memento 'unpack' _____________________________________________*/
00497 
00498 /* END: _______________________________________________________________________*/
00499     
00500 #   ifndef __QUEX_OPTION_PLAIN_C
00501     /* Counterpart to placement new: Explicit destructor call.
00502      * Necessary in C++: Trigger call to destructor for user defined members.  */
00503     memento->~QUEX_NAME(Memento_tag)();
00504 #   endif
00505 
00506     QUEX_NAME(MemoryManager_Memento_free)(memento);
00507 #   undef self
00508 }
00509 #endif /* QUEX_OPTION_INCLUDE_STACK */
00510 
00511 QUEX_NAMESPACE_MAIN_CLOSE
00512 
00513 #include <quex/code_base/temporary_macros_off>
00514 
00515 #if defined(__QUEX_OPTION_CONVERTER_HELPER)
00516 #   include "quex/code_base/converter_helper/from-unicode-buffer.i"
00517 #endif
00518 #include <quex/code_base/analyzer/headers.i>
00519 
00520 
00521 
00522 
00523 #endif /* __QUEX_INCLUDE_GUARD__ANALYZER__GENERATED____CT____LEXER */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines