📄 cparser.c
字号:
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 + -