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

📄 cparser.c

📁 这是一个Linux下的集成开发环境
💻 C
📖 第 1 页 / 共 5 页
字号:
            niveau--;/*             printf( "***** ptr operator ***** return True\n" ); */            return True;         }         else if( token( 0 ) == '*' )            /* typedef int (__cdecl * _PNH)( size_t ); miatt */         {            step( 1 );            if( plstr )            {               LongStringMyAppend( plstr, " *" );            }            cv_qualifier_list_opt( plstr );            niveau--;/*             printf( "***** ptr operator ***** return True\n" ); */            return True;         }         else         {            Restore_d();            niveau--;/*             printf( "***** ptr operator ***** return False\n" ); */            return False;         }      }      else      {         Restore_d();         niveau--;/*          printf( "***** ptr operator ***** return False\n" ); */         return False;      }      break;   default         :      Restore_d();      niveau--;/*       printf( "***** ptr operator ***** return False\n" ); */      return False;      break;   }   Restore_d();   niveau--;/*    printf( "***** ptr operator ***** return False\n" ); */   return False;}extern void cv_qualifier_list_opt( LongString *plstr ){   int t;   int iCONST = 0;   int iVOLATILE = 0;   niveau++;   while( True )   {      t = token( 0 );      if( t == SN_CONST )      {         iCONST = 1;      }      else if( t == SN_VOLATILE )      {         iVOLATILE = 1;      }      else      {         break;      }      step( 1 );   }   if( plstr )   {      if( iCONST    ) { LongStringMyAppend( plstr, "const "    ); }      if( iVOLATILE ) { LongStringMyAppend( plstr, "volatile " ); }   }   niveau--;}extern int function_or_array_list( Declarator_t Declarator ){   Save_d();   int i = 0;   niveau++;   /* 11.09.96 rigo - int a ANSI(( int b )); miatt */   if( token( 0 ) == SN_IDENTIFIER && token( 1 ) == '(' && token( 2 ) == '(' )   {      step( 1 );   }   while( True )   {      switch( token( 0 ))      {      case '('       :         if( ! function_operator( Declarator ))         {            Restore_d();            niveau--;            return False;         }         if( ++i == 2 )         {            Restore_d();            niveau--;            return False;         }         break;      case '['       :         if( ! array_operator( Declarator ))         {            Restore_d();            niveau--;            return False;         }         break;      default        :         niveau--;         return True;      }   }}extern int function_operator( Declarator_t Declarator ){   Save_d();   int i;   niveau++;   step( 1 );   if( Declarator->base_typ == 0 )   {      function_argument_declaration_list( &Declarator->types                                        , &Declarator->names );   }   else   {      i = 1;      while( i > 0 )      {         switch( token( 0 ))         {         case '(': step( 1 ); i++; break;         case ')': step( 1 ); i--; break;         case  0 :             Restore_d();            niveau--;            return False;         default : step( 1 ); break;         }      }   }   while( True )   {      int t = token( 0 );      if( t == SN_CONST || t == SN_VOLATILE )      {         step( 1 );      }      else      {         break;      }   }   if( Declarator->base_typ == 0 )   {      Declarator->base_typ = FUNCTION;   }   else   {      LongStringMyAppend( &Declarator->type, "()" );   }   niveau--;   return True;}extern int array_operator( Declarator_t Declarator ){   Save_d();   int i;   niveau++;   step( 1 );   i = 1;   while( i > 0 )   {      switch( token( 0 ))      {      case '[': step( 1 ); i++; break;      case ']': step( 1 ); i--; break;      case  0 :          Restore_d();         niveau--;         return False;      default : step( 1 ); break;      }   }   LongStringMyAppend( &Declarator->type, "[]" );   if( Declarator->base_typ == 0 )   {      Declarator->base_typ = ARRAY;   }   niveau--;   return True;}extern int f_class( Declaration_t Declaration, Class_t Class ){   Save_d();   int lineno;   int charno;   int paf;   unsigned long attr;   char *template_args;   int t;   char *comment;   char *classname_save;         /* 08.04.97 rigo */   niveau++;   /* LongStringInit( &Class->name, -1 ); Zsolt Koppany, 30-dec-97 */   Class->access = 0;   Class->lineno_beg = f_lineno( 0 );   Class->charno_beg = f_charno( 0 );   Class->lineno_end = f_lineno( 0 );   Class->charno_end = f_charno( 0 ) + identleng( 0 );   switch( token( 0 ))   {   case SN_INTERFACE:   case SN_CLASS:      if( Declaration ) Declaration->type_of_type_name = SN_CLASS;      Class->access = SN_PRIVATE;      paf  = PAF_CLASS_DEF ;      attr = 0 ;      break;   case SN_STRUCT:      if( Declaration ) Declaration->type_of_type_name = SN_STRUCT;      Class->access = SN_PUBLIC;      paf  = PAF_CLASS_DEF;      attr = PAF_STRUCT_DEF;      break;   case SN_UNION:      if( Declaration ) Declaration->type_of_type_name = SN_UNION;      Class->access = SN_PUBLIC;      paf  = PAF_UNION_DEF ;      attr = 0 ;      break;   }   step( 1 );   skip_macro_2();   /* 17.11.97 rigo */   switch( token( 0 ))   {   case SN_IDENTIFIER:      if( token( 1 ) == SN_IDENTIFIER &&        ( token( 2 ) == ':' || token( 2 ) == LBRACE || token( 2 ) == '<' ))      {         step( 1 );  /* atlepjuk a G_EXP_IMP-et */      }      lineno = f_lineno( 0 );      charno = f_charno( 0 );      Class->lineno_beg = lineno;      Class->charno_beg = charno;      LongStringIdAppend( &Class->name, ident( 0 ));      step( 1 );      if( token( 0 ) == '<' )      {         template_argument_skip( &Class->name );      }      Class->lineno_end = f_lineno( -1 );      Class->charno_end = f_charno( -1 ) + identleng( -1 );      if( token( 0 ) == ':' )      {         base_spec( Class );         while(( t = token( 0 )) != LBRACE && t != 0 && t != ';' )                                                /* t != 0   10.02.97 rigo */                                                /* t != ';' 17.02.97 rigo */         {            step( 1 );         }      }      if( token( 0 ) == LBRACE )      {         comment = get_comment( Class->lineno_end );         classname_save = classname_g;                   /* 08.04.97 */         classname_g = my_strdup( Class->name.buf );         /* 07.04.97 */         member_list( Class );         while(( t = token( 0 )) != RBRACE && t != 0 )   /* t != 0 10.02.97 rigo */         {            step( 1 );         }         step( 1 );         my_free( classname_g );                         /* 08.04.97 */         classname_g = classname_save;                   /* 08.04.97 */         if( Declaration &&             Declaration->Declaration &&             Declaration->Declaration->name.buf )         {            template_args = Declaration->Declaration->name.buf;         }         else         {            template_args = 0;         }         Put_symbol( paf                   , get_scope( Class->name.buf )                   , get_name( Class->name.buf )                   , filename_g                   , lineno                   , charno                   , f_lineno( -1 )                   , f_charno( -1 ) + 1                   , (unsigned long) attr                   , (char *) 0                   , template_args                   , (char *) 0                   , comment                   , Class->lineno_beg                   , Class->charno_beg                   , Class->lineno_end                   , Class->charno_end                   );      }      if( Declaration )      {         LongStringsMyAppend( &Declaration->type_name, &Class->name );      }      niveau--;      return True;   case ':'       :      if( Declaration && Declaration->storage_class == SN_TYPEDEF ) /* 11.02.97 rigo */      {         sString_t str_name;         if( get_struct_name( &Class->lineno_beg, &Class->charno_beg, &str_name ))         {            Declaration->storage_class = SN_TYPEDEF_TO_CLASS;            LongStringIdCopy( &Class->name, str_name );            LongStringsMyAppend( &Declaration->type_name, &Class->name );            Class->lineno_end = Class->lineno_beg;            Class->charno_end = Class->charno_beg + Class->name.len;         }         else         {            LongStringMyCopy( &Class->name, ANONYM );         }      }      else      {         LongStringMyCopy( &Class->name, ANONYM );      }      base_spec( Class );      while(( t = token( 0 )) != LBRACE && t != 0 && t != ';' )                                             /* t != 0   10.02.97 rigo */                                             /* t != ';' 17.02.97 rigo */      {         step( 1 );      }      if( token( 0 ) == LBRACE )      {         lineno = f_lineno( 0 );         charno = f_charno( 0 ) + 1;         comment = get_comment( Class->lineno_end );         classname_save = classname_g;                /* 08.04.97 */         classname_g = my_strdup( Class->name.buf );      /* 07.04.97 */         member_list( Class );         while(( t = token( 0 )) != RBRACE && t != 0 )   /* t != 0 10.02.97 rigo */         {            step( 1 );         }         step( 1 );         my_free( classname_g );                         /* 08.04.97 */         classname_g = classname_save;                   /* 08.04.97 */         Put_symbol( paf                   , get_scope( Class->name.buf )                   , get_name( Class->name.buf )                   , filename_g                   , lineno                   , charno                   , f_lineno( -1 )                   , f_charno( -1 ) + 1                   , (unsigned long) attr                   , (char *) 0                   , (char *) 0                   , (char *) 0                   , comment                   , Class->lineno_beg                   , Class->charno_beg                   , Class->lineno_end                   , Class->charno_end                   );         niveau--;         return True;      }      else  /* ez itt nem class, hanem class nevu bitfield (int class : 5;) */            /* 17.02.97 rigo */      {         Restore_d();         niveau--;         return False;      }   case LBRACE    :      if( Declaration && Declaration->storage_class == SN_TYPEDEF ) /* 11.02.97 rigo */      {         sString_t str_name;         if( get_struct_name( &Class->lineno_beg, &Class->charno_beg, &str_name ))         {            Declaration->storage_class = SN_TYPEDEF_TO_CLASS;            LongStringIdCopy( &Class->name, str_name );            LongStringsMyAppend( &Declaration->type_name, &Class->name );            Class->lineno_end = Class->lineno_beg;            Class->charno_end = Class->charno_beg + Class->name.len;         }         else         {            LongStringMyCopy( &Class->name, ANONYM );         }      }      else      {         LongStringMyCopy( &Class->name, ANONYM );      }      lineno = f_lineno( 0 );      charno = f_charno( 0 ) + 1;      comment = get_comment( Class->lineno_end );      classname_save = classname_g;                /* 08.04.97 */      classname_g = my_strdup( Class->name.buf );      /* 07.04.97 */      member_list( Class );      while(( t = token( 0 )) != RBRACE && t != 0 )   /* t != 0 10.02.97 rigo */      {         step( 1 );      }      step( 1 );

⌨️ 快捷键说明

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