⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 token.c

📁 这是一个Linux下的集成开发环境
💻 C
字号:
/*Copyright (c) 2000, Red Hat, Inc.This file is part of Source-Navigator.Source-Navigator is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public License as publishedby the Free Software Foundation; either version 2, or (at your option)any later version.Source-Navigator is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public License alongwith Source-Navigator; see the file COPYING.  If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330, Boston,MA 02111-1307, USA.*/#include <stdio.h>#include <stdlib.h>#include <tcl.h>#include "cplex.h"static Token_t TokenFree_m;static int iTokenFree_m;static Token_t aTokenFreeMallocArray[100];   /* 18.11.97 rigo */static int iTokenFreeMallocArray;            /* 18.11.97 rigo */static Token_t TokenFreeMalloc;static int iTokenFreeMalloc;#ifdef TOKEN_ALL_CHECKstatic Token_t TokenAll_m;#endifstatic int iTokenAll_m;static int iTokenFromMalloc_m;int bCheckOfToken2 = False;extern Token_t f_TokenCreate( void ){   Token_t Token;   if( TokenFree_m )   {      Token = TokenFree_m;      TokenFree_m = TokenFree_m->TokenFreeNext;      iTokenFree_m--;      Token->keyword = 0;      Token->iParameter = -1;      Token->is_free    = False;      Token->pcValue    = 0;      Token->TokenNext  = Token;      Token->TokenPrev  = Token;      Token->TokenFreeNext = 0;      return Token;   }   else   {      if( iTokenFreeMalloc == 0 )      {         iTokenFreeMalloc = 1000;         aTokenFreeMallocArray[iTokenFreeMallocArray++] =   /* 18.11.97 rigo */         TokenFreeMalloc = (Token_t) ckalloc( iTokenFreeMalloc * sizeof( sToken_t ));         iTokenAll_m  += iTokenFreeMalloc;         iTokenFree_m += iTokenFreeMalloc;/*          printf( "TokenAll: %7d\n", iTokenAll_m ); */      }      Token = TokenFreeMalloc + --iTokenFreeMalloc;      iTokenFromMalloc_m++;#ifdef TOKEN_ALL_CHECK      Token->TokenAllNext = TokenAll_m;      TokenAll_m = Token;#endif      iTokenFree_m--;      Token->keyword = 0;      Token->iParameter = -1;      Token->is_free    = False;      Token->pcValue    = 0;      Token->TokenNext  = Token;      Token->TokenPrev  = Token;      Token->TokenFreeNext = 0;      return Token;   }}extern void f_TokenFree( Token_t Token ){   if( Token->is_free )   {      fprintf( stderr, "Fatal error: f_TokenFree on a free Token: %*.*s\n"            , Token->sString.leng            , Token->sString.leng            , Token->sString.text            );      *(int*)0 = 0;   }   Token->is_free = True;   if( Token->pcValue )   {      ckfree( Token->pcValue );      Token->pcValue = 0;   }   Token->TokenFreeNext = TokenFree_m;   TokenFree_m = Token;   iTokenFree_m++;}extern void free_token_buffers() /* 18.11.97 rigo */{   int i;   for( i = 0; i < iTokenFreeMallocArray; i++ )   {      ckfree ((char*) aTokenFreeMallocArray[i] );      aTokenFreeMallocArray[i] = 0;   }   iTokenFreeMallocArray = 0;   TokenFreeMalloc = NULL;   iTokenFreeMalloc = 0;}extern void f_TokenFreeAll( Token_t Token ){   WHILE_TOKEN( Token )      if( Token->is_free )      {         fprintf( stderr, "Fatal error: f_TokenFree on a free Token: %*.*s\n"               , Token->sString.leng               , Token->sString.leng               , Token->sString.text               );         *(int*)0 = 0;      }      Token->is_free = True;      if( Token->pcValue )      {         ckfree( Token->pcValue );         Token->pcValue = 0;      }      Token->TokenFreeNext = TokenFree_m;      TokenFree_m = Token;      iTokenFree_m++;   END_WHILE}extern void f_TokenAppend( Token_t *pTokenBeg1, Token_t TokenBeg2 ){   if( *pTokenBeg1 == 0 )   {      *pTokenBeg1 = TokenBeg2;   }   else   {      Token_t TokenBeg1 = *pTokenBeg1;      Token_t TokenEnd1 = TokenBeg1->TokenPrev;      Token_t TokenEnd2 = TokenBeg2->TokenPrev;      TokenBeg1->TokenPrev = TokenEnd2;      TokenBeg2->TokenPrev = TokenEnd1;      TokenEnd1->TokenNext = TokenBeg2;      TokenEnd2->TokenNext = TokenBeg1;   }}extern void f_TokenDelete( Token_t Token ){   Token_t TokenPrev = Token->TokenPrev;   Token_t TokenNext = Token->TokenNext;/*    printf( "*** TokenDelete ***\n" ); *//*    f_TokenOnePrint( Token ); *//*    f_TokenOnePrint( TokenPrev ); *//*    f_TokenOnePrint( TokenNext ); */   TokenPrev->TokenNext = TokenNext;   TokenNext->TokenPrev = TokenPrev;}extern Token_t f_TokenDuplicate( Token_t Token ){   Token_t TokenReturn = f_TokenCreate();   TokenReturn->lex          = Token->lex;   TokenReturn->sString      = Token->sString;   TokenReturn->keyword      = Token->keyword;   TokenReturn->is_cpp       = Token->is_cpp;   TokenReturn->iParameter   = Token->iParameter;   TokenReturn->lineno_beg   = Token->lineno_beg;   TokenReturn->charno_beg   = Token->charno_beg;   TokenReturn->lineno_end   = Token->lineno_end;   TokenReturn->charno_end   = Token->charno_end;   return TokenReturn;}extern void f_TokenCheck( void ){#ifdef TOKEN_ALL_CHECK   Token_t Token;   int i;#endif   printf( "TokenAll       : %d\n", iTokenAll_m        );   printf( "TokenFree      : %d\n", iTokenFree_m       );   printf( "TokenFromMalloc: %d\n", iTokenFromMalloc_m );#ifdef TOKEN_ALL_CHECK   i = 0;   for( Token = TokenAll_m; Token; Token = Token->TokenAllNext )   {      i++;      if( ! Token->is_free )      {         printf( "Token not free: %*.*s (%d,%d)\n"               , Token->sString.leng               , Token->sString.leng               , Token->sString.text               , Token->lineno_beg               , Token->charno_beg               );      }   }   printf( "Token in TokenAll chain: %d\n", i );#endif}extern void f_TokenPrint( Token_t Token ){   Token_t TokenOrig;   Token_t TokenLast;   TokenOrig = Token;   printf( "*********** TOKEN ***********\n" );   WHILE_TOKEN( Token )      printf( "Token: %3d <%*.*s>\n"            , Token->lex            , Token->sString.leng            , Token->sString.leng            , Token->sString.text            );      TokenLast = Token;   END_WHILE   if( TokenLast->TokenNext != TokenOrig )      printf( "error 1\n" );   if( TokenOrig->TokenPrev != TokenLast )      printf( "error 2\n" );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -