static void hb_pp_writeToken( FILE * fout, PHB_PP_TOKEN pToken, const char * szName, int iToken, HB_BOOL fLast ) { while( pToken ) { int iOptional = hb_pp_writeTokenCount( pToken->pMTokens ), i; i = ( int ) strlen( szName ); if( pToken->pNext ) fprintf( fout, " { %s +%2d", szName, iToken + iOptional + 1 ); else fprintf( fout, " { NULL%*s", i, "" ); if( iOptional ) fprintf( fout, ", %s +%2d", szName, iToken + 1 ); else fprintf( fout, ", NULL%*s", i, "" ); i = 16 - ( int ) strlen( pToken->value ); fprintf( fout, ", \"%s\", %*s %2d,%2d, 0x%04x, %u }%s\n", pToken->value, i < 0 ? 0 : i, "", ( int ) pToken->len, ( int ) pToken->spaces, pToken->type | HB_PP_TOKEN_STATIC | HB_PP_TOKEN_PREDEFINED, pToken->index, fLast && ! pToken->pNext && iOptional == 0 ? "" : "," ); if( iOptional ) hb_pp_writeToken( fout, pToken->pMTokens, szName, iToken + 1, pToken->pNext == NULL && fLast ); iToken += iOptional + 1; pToken = pToken->pNext; } }
/* * functions to create .c files with rules defined in given PP context */ static int hb_pp_writeTokenCount( PHB_PP_TOKEN pToken ) { int iToken = 0; while( pToken ) { iToken += hb_pp_writeTokenCount( pToken->pMTokens ) + 1; pToken = pToken->pNext; } return iToken; }
static void hb_pp_writeTokenList( FILE * fout, PHB_PP_TOKEN pTokenLst, char * szName ) { int iTokens; iTokens = hb_pp_writeTokenCount( pTokenLst ); if( iTokens ) { fprintf( fout, "static HB_PP_TOKEN %s[ %d ] = {\n", szName, iTokens ); hb_pp_writeToken( fout, pTokenLst, szName, 0, TRUE ); fprintf( fout, "};\n" ); } }