# include # include "mylib.h" # include "../utils/zlexer.h" # define Ifstr( a,b ) if( 0==strcmp(a,b) ) /***************************************************************************/ t_Lexer :: t_Lexer( void ) { Mass = NULL ; Mass1 = NULL ; Token = NULL ; l_Mass = 0 ; l_Mass1 = 0 ; n_Token = 0 ; clr_breaker( ); } /***************************************************************************/ t_Lexer :: ~t_Lexer( void ) { Free( Mass ); Free( Mass1 ); Free( Token ); } /***************************************************************************/ // set_breaker( ".,;:#$%^=+-*/(){}<>[]\"\\" ); void t_Lexer :: set_breaker( unsigned char *Breaker ) { for( short i=0 ; i<256 && Breaker[i]!=0 ; i++ ) Type[Breaker[i]]=1 ; } /***************************************************************************/ void t_Lexer :: clr_breaker( void ) { for( short i=0 ; i<256 ; i++ ) Type[i]=0 ; Type[' '] =2 ; Type['\t']=2; Type['\n']=3 ; Type['\r']=3 ; } /***************************************************************************/ void t_Lexer :: init( char *_Mass, long _L ) { Free( Mass ); Free( Mass1 ); Free( Token ); Mass =(char *)Calloc(_L,sizeof(char)); Token=(t_Token *)Calloc( max(3,_L/2) ,sizeof(t_Token)); l_Mass=_L ; for( long i=0 ; i<_L ; i++ ) Mass[i]=_Mass[i] ; } /***************************************************************************/ /* создать из текста массив слов */ /***************************************************************************/ void t_Lexer :: make_token( void ) { long i,i1,j_Token=0 ; char t,t1,f=0 ; unsigned char c,c1,c2 ; for( i=0 ; i