sheepy

build system (sheepy) and package manager (spm) for C
git clone https://spartatek.se/git/sheepy.git
Log | Files | Refs | README | LICENSE

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