When we use tokenizer, we just call getToken: And getToken must memory the index of start and end of token.
=== aToken.cpp ===
13 :char* aToken::getToken( FILE *fp, int *index, int *file_end ) 14 :{ 15 : char dummy[256]; 16 : int mode_token = 0; // skip 17 : // 0: skip 18 : // 1: 19 : // 2: 20 : int breakable = 0; 21 : dummy[0] = '\0'; 22 : 23 : for ( int i=*index; i<*file_end && breakable == 0; i++ ) { 24 : m_fread ( dummy, 1, fp); 25 : printf("dummy=%s\r\n", dummy ); 26 : switch(mode_token) { 27 : case 0: 28 : switch ( dummy[0] ) { 29 : case ' ': 30 : break; 31 : default: 32 : if ( is_alphabet( dummy ) == 1 ) { 33 : mode_token = 1; 34 : } else { 35 : mode_token = 2; 36 : } 37 : token = put_token ( dummy[0] ); 38 : printf("token=%s dummy=%s dummy[0]=%c\r\n", token, dummy, dummy[0] ); 39 : break; 40 : } 41 : break; 42 : case 1: 43 : switch ( dummy[0] ) { 44 : case ' ': 45 : break; 46 : default: 47 : token = put_token ( dummy[0] ); 48 : printf("token=%s dummy=%s dummy[0]=%c\r\n", token, dummy, dummy[0] ); 49 : break; 50 : } 51 : break; 52 : case 2: 53 : switch ( dummy[0] ) { 54 : case ' ': 55 : breakable = 1; 56 : break; 57 : default: 58 : token = put_token ( dummy[0] ); 59 : printf("token=%s dummy=%s dummy[0]=%c\r\n", token, dummy, dummy[0] ); 60 : break; 61 : } 62 : break; 63 : } 64 : } 65 : 66 : backward( dummy ); 67 : printf("token=%s\r\n", token); 68 : exit(-1); 69 : 70 : return token; 71 :}