token-sending (3052B)
1 /* -*- C++ -*- vim: set syntax=cpp: 2 * (C) 2005-2010 Frank-Rene Schaefer 3 * ABSOLUTELY NO WARRANTY */ 4 #ifndef __QUEX_INCLUDE_GUARD__ANALYZER__MEMBER__TOKEN_SENDING 5 #define __QUEX_INCLUDE_GUARD__ANALYZER__MEMBER__TOKEN_SENDING 6 7 #include "TokenPolicy" 8 9 QUEX_NAMESPACE_MAIN_OPEN 10 11 #define self (*this) 12 13 #if defined(QUEX_OPTION_TOKEN_POLICY_SINGLE) 14 # define self_token_p() (self.token) 15 # define self_write_token_p() (self.token) 16 #else 17 # define self_token_p() (self._token_queue.read_iterator) 18 # define self_write_token_p() QUEX_NAME(TokenQueue_access_write_p)(&self._token_queue) 19 #endif 20 21 #define self_send(ID) \ 22 do { \ 23 __QUEX_ASSERT_SEND_ENTRY(); \ 24 self_token_set_id(ID); \ 25 QUEX_TOKEN_POLICY_PREPARE_NEXT(); \ 26 } while ( 0 ) 27 28 #define self_send1(ID, Str) \ 29 do { \ 30 __QUEX_ASSERT_SEND_ENTRY(); \ 31 self_token_set_id(ID); \ 32 QUEX_NAME_TOKEN(take_text)(self_write_token_p(), &self, \ 33 (Str), \ 34 (Str) + QUEX_NAME(strlen)(Str)); \ 35 QUEX_TOKEN_POLICY_PREPARE_NEXT(); \ 36 } while ( 0 ) 37 38 #define self_send2(ID, StrBegin, StrEnd) \ 39 do { \ 40 __QUEX_ASSERT_SEND_ENTRY(); \ 41 self_token_set_id(ID); \ 42 QUEX_NAME_TOKEN(take_text)(self_write_token_p(), &self, \ 43 (StrBegin), (StrEnd)); \ 44 QUEX_TOKEN_POLICY_PREPARE_NEXT(); \ 45 } while ( 0 ) 46 47 #ifdef QUEX_OPTION_TOKEN_REPETITION_SUPPORT 48 # define self_send_n(RepetitionN, ID) \ 49 do { \ 50 __quex_assert_msg(__QUEX_SETTING_TOKEN_ID_REPETITION_TEST(ID), \ 51 "send_send_n() applied to token id which was not mentioned\n" \ 52 "in a 'repeated_token { ... }' section in the .qx file."); \ 53 self_token_set_id(ID); \ 54 __quex_assert(RepetitionN != 0); \ 55 QUEX_NAME_TOKEN(repetition_n_set)(self_write_token_p(), RepetitionN); \ 56 QUEX_TOKEN_POLICY_PREPARE_NEXT(); \ 57 } while ( 0 ) 58 #else 59 # define self_send_n(RepetitionN, ID) \ 60 QUEX_ERROR_EXIT("\n" \ 61 QUEX_SOURCE_POS() "Use of self_send_n() without repetition support.\n" \ 62 QUEX_SOURCE_POS() "Define at least one id in 'repeated_token' section in the .qx file.") 63 #endif 64 65 #undef self 66 67 QUEX_NAMESPACE_MAIN_CLOSE 68 69 #endif /* __QUEX_INCLUDE_GUARD__ANALYZER__MEMBER__TOKEN_SENDING */ 70