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

📄 cparser.c

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 C
📖 第 1 页 / 共 5 页
字号:
/*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.*/#define VERSION_1#undef  VERSION_COMPARE#undef  PP_TEST#undef  FUNCTION_MACRO#undef  TRACE           /* ez irja ki a tokeneket */#undef TRACE_FILE       /* ezt kell bekapcsolni, hogy a put_symbol jelentesek                           bekeruljenek a 'cbrowser.trace' file-ba */#undef ARRAY_TEST#undef BETTER_TEST      /* azert, hogy a variable declaration is piros legyen */#undef PRINT_TOKEN_LIST#include <stdio.h>#include <string.h>#include <tcl.h>#include <ctype.h>#include "cplex.h"#include "longstr.h"#include "cpdefines.h"#include "sn.h"#define null_safe(x) ((x)==0?"":(x))#define False 0#define True (!False)#define Return( x ) { retval = x; goto return_label; }#define ANONYM "anonymous"#ifndef FUNCTION_MACRO   #define step(i) (iva+=(i))   #define token(i) ((ivt<=iva+(i)?f_read(i),0:0), keyw_cpp ? v[(iva+(i))&ZZMASK].yytoken_cpp : v[(iva+(i))&ZZMASK].yytoken )   #define ident(i)      ((ivt<=iva+(i)?f_read(i),0:0), v[(iva+i)&ZZMASK].yytext)   #define identleng(i)  ((ivt<=iva+(i)?f_read(i),0:0), v[(iva+i)&ZZMASK].yytext.leng)   #define f_lineno(i)   ((ivt<=iva+(i)?f_read(i),0:0), v[(iva+i)&ZZMASK].yylineno)   #define f_charno(i)   ((ivt<=iva+(i)?f_read(i),0:0), v[(iva+i)&ZZMASK].yycharno)#endif#define Save_d()    int iva_save = iva#define Restore_d() iva = iva_save#define GetStatus( depth ) sIfstack[depth].status#define IfstackStatusMax( depth ) sIfstack[depth].status_max#define IfstackElse( depth ) sIfstack[depth]._else#define IfstackUndef( depth ) sIfstack[depth].undef#define DECLARATION_UNKNOWN               0#define DECLARATION_ASM                   1#define DECLARATION_TEMPLATE              2#define DECLARATION_LINKAGE_SPECIFICATION 3#define DECLARATION_NAMESPACE             4#define DECLARATION_USING                 5#define DECLARATION_OBJECT                6#define LBRACE '{'#define RBRACE '}'#define FUNCTION 1#define POINTER  2#define ARRAY    3#define my_strdup(x) (((x)==0)?0:SN_StrDup(x))#define my_free(x)   if(x)ckfree(x)/* #define LongStringsMyInit( plstr ) (LongStringInit(plstr,-1),LongStringMyCopy(plstr,"",-1)) */#define LongStringsMyCopy( plstr1, plstr2 ) (plstr1)->copy((plstr1),(plstr2)->buf, (plstr2)->len )#define LongStringMyCopy( plstr, pc ) (plstr)->copy((plstr), pc, -1 )#define LongStringsMyAppend( plstr1, plstr2 ) (plstr1)->append((plstr1),(plstr2)->buf, (plstr2)->len )#define LongStringMyAppend( plstr, pc ) (plstr)->append((plstr), pc, -1 )#define LongStringMyFree( plstr ) (plstr)->free( plstr );#define LongStringIdCopy( plstr, ident ) { sString_t sString = ident; (plstr)->copy((plstr), sString.text, sString.leng ); }#define LongStringIdAppend( plstr, ident ) { sString_t sString = ident; (plstr)->append((plstr), sString.text, sString.leng ); }#define LongStringMySetLen( plstr, l ) (((plstr)->buf ? (plstr)->buf[l] = 0 : 0), (plstr)->len = (l))extern FILE *cross_ref_fp;typedef struct sDeclaration sDeclaration_t, *Declaration_t;typedef struct sDeclarator  sDeclarator_t , *Declarator_t ;typedef struct sClass       sClass_t      , *Class_t      ;typedef struct sEnum        sEnum_t       , *Enum_t       ;typedef struct sArray       sArray_t      , *Array_t      ;struct sArray{   char *string;   int changed;};struct sClass{   Class_t ClassParent;   LongString name;   int access;   int lineno_beg;   int charno_beg;   int lineno_end;   int charno_end;};struct sEnum      /* struct for enumeration */{   LongString name;   int lineno_beg;   int charno_beg;   int lineno_end;   int charno_end;};struct sDeclaration  /* struct for declaration */{   Declaration_t Declaration;   int type;   LongString name;     /* space for namespace_name or template_args */   int storage_class;   int fct_specifier;   int s_const;   int s_volatile;   int s_char;   int s_short;   int s_int;   int s_long;   int s_signed;   int s_unsigned;   int s_float;   int s_double;   int s_bool;   int s_void;   LongString type_name;   /* space for typedef_name or class_name to message */   int type_of_type_name;  /* SN_CLASS or SN_STRUCT or SN_UNION or SN_ENUM or SN_INTERFACE */   LongString complete_class_name;  /* space for complete_class_name */   int lineno_beg;   int charno_beg;   int lineno_end;   int charno_end;   sClass_t sClass;   sEnum_t sEnum;};struct sDeclarator{   LongString name;   LongString type;   LongString types; /* falls function definition */   LongString names; /* falls function definition */   int base_typ;   int pure;   int lineno_beg;   int charno_beg;   int lineno_end;   int charno_end;   int name_lineno_beg;   int name_charno_beg;};static int depth;struct sIfstack{   int status;   int niveau;   int status_max;   int undef;   int _else;};static struct sIfstack sIfstack[1000];#define ZZSIZE (0x10000)#define ZZMASK ( 0xffff)typedef struct{   int yytoken;   int yytoken_cpp;   sString_t yytext;   int yyleng;   int yylineno;   int yycharno;} ZZSTYPE;char *filename_g;char *classname_g;char *funcname_g;int is_cpp_g;  /* are the cpp keywords highlighted ? */int keyw_cpp;  /* are the cpp keywords as keywords or identifiers processed ? */int keyw_cpp_orig;int keyw_cpp_cnt; /* how many cpp keyword and operator is already getting */int declaration_try;int mode_g;int pass = 1;int yyfd;extern FILE *hig_fp;static ZZSTYPE v[ ZZSIZE ];   /* value stack */static int ivt;   /* index of first empty */static int iva;   /* index of 0 */static int niveau;static int bPutSymbol_m;extern int Put_symbol(int type, char *scope, char *sym_name,		      char *file, int start_lineno, int start_colpos,		      int end_lineno, int end_colpos,		      unsigned long attr, char *ret, char *arg_types,		      char *args, char	*reserved,		      int start_lineno_highlight,		      int start_colpos_highlight, 		      int end_lineno_highlight,		      int end_colpos_highlight);extern void declaration( Declaration_t Declaration );extern int _declaration( Declaration_t Declaration );extern int asm_declaration( Declaration_t Declaration );extern int template_declaration( Declaration_t Declaration );extern int extern_declaration( Declaration_t Declaration );extern int linkage_specification( Declaration_t Declaration );extern int using( Declaration_t Declaration );extern int namespace_definition( Declaration_t Declaration );extern int obj_declaration( Declaration_t Declaration );extern int declarator_list( Declaration_t Declaration );extern int declarator( Declarator_t Declarator );extern int declarator_paren( Declarator_t Declarator );extern int declarator_star( Declarator_t Declarator );extern int declarator_identifier( Declarator_t Declarator );extern int declarator_operator( Declarator_t Declarator );extern int declarator_tilde( Declarator_t Declarator );extern int ptr_operator( LongString *plstr );extern void cv_qualifier_list_opt( LongString *plstr );extern int function_or_array_list( Declarator_t Declarator );extern int f_class( Declaration_t Declaration, Class_t Class );extern int base_spec( Class_t Class );extern int base_specifier( Class_t Class );extern int member_list( Class_t Class );extern int member( Class_t Class );extern int member_declaration( Class_t Class );extern int _member_declaration( Class_t Class );extern int member_declarator_list( Class_t Class, Declaration_t Declaration );extern int member_declarator( Declarator_t Declarator );extern int f_enum( Declaration_t Declaration, Enum_t Enum );extern int enum_list( Enum_t Enum );extern int enumerator( Enum_t Enum );extern int operator_function_name( LongString *plstr );extern int conversion_type_name( LongString *plstr );extern int conversion_type_specifier( LongString *plstr );extern int complete_class_name( LongString *plstr );extern void qualified_class_name( LongString *plstr );extern int qualified_name( LongString *plstr, int *plineno, int *pcharno );extern int function_operator( Declarator_t Declarator );extern int array_operator( Declarator_t Declarator );extern void initializer( void );extern void ctor_initializer( void );extern void constant_expression( void );extern int kr_argument_declaration_list( LongString *types, LongString *names );extern int kr_argument_declaration( Array_t ArrayTypes, Array_t ArrayNames );extern int kr_argument_declarator_list( Declaration_t Declaration, Array_t ArrayTypes, Array_t ArrayNames );extern int kr_argument_declarator( Declarator_t Declarator );extern int kr_argument_declarator_paren( Declarator_t Declarator );extern int kr_argument_declarator_star( Declarator_t Declarator );extern int kr_argument_declarator_identifier( Declarator_t Declarator );extern void compound_statement( void );extern void variable( Declaration_t Declaration, Declarator_t Declarator );extern void function( Declaration_t Declaration, Declarator_t Declarator, int lineno_end, int charno_end, int lineno_brace_beg, int charno_brace_beg, char *comment );extern void class_member( Class_t Class, Declaration_t Declaration, Declarator_t Declarator );extern void class_method( Class_t Class, Declaration_t Declaration, Declarator_t Declarator, int lineno_end, int charno_end, int lineno_brace_beg, int charno_brace_beg, char *comment );extern void class_empty_declarator_list( Class_t Class, Declaration_t Declaration );extern void template_argument_skip( LongString *plstr );extern int namespace_name( LongString *plstr );extern void skip_declaration( void );extern int skip_member_declaration( void );extern void function_argument_declaration_list( LongString *types, LongString *names );extern void function_argument_declaration( LongString *types, LongString *names );extern void function_argument_class( int storage_class, LongString *plstr );extern void function_argument_enum( int storage_class, LongString *plstr );extern int function_argument_declarator_one( Declarator_t Declarator );extern void skip_expression( void );extern int function_argument_declarator( Declarator_t Declarator );extern int function_argument_declarator_paren( Declarator_t Declarator );extern int function_argument_declarator_star( Declarator_t Declarator );extern int function_argument_declarator_identifier( Declarator_t Declarator );extern int function_argument_declarator_operator( Declarator_t Declarator );extern int function_argument_declarator_tilde( Declarator_t Declarator );extern int function_argument_function_or_array_list( Declarator_t Declarator );extern int function_argument_function_operator( Declarator_t Declarator );extern int function_argument_array_operator( Declarator_t Declarator );extern int function_argument_base_spec( void );extern unsigned long attr_from_declaration( Declaration_t Declaration );extern void create_type( LongString *type, Declaration_t Declaration, Declarator_t Declarator );#ifndef VERSION_1extern void create_type_argument_list( LongString *type, Declaration_t Declaration, Declarator_t Declarator );#endif /* VERSION_1 */extern char *get_scope( char *name );extern char *get_name( char *name );extern void put_cross1( int type, char *scope, char *sym_name, char *file, int start_lineno, int start_colpos, int end_lineno, int end_colpos, unsigned long attr, char *ret, char *types, char *names, char *reserved );extern int get_struct_name( int *plineno, int *pcharno, sString_t *psString );extern int is_single_parameter_list( LongString *types );extern int array_change_type_and_name( Array_t ArrayTypes, Array_t ArrayNames, char *type, char *name );extern void array_change_not_changed( Array_t ArrayTypes, Array_t ArrayNames );extern Array_t array_create( LongString *plstr );extern void array_destroy( Array_t Array );#ifdef ARRAY_TESTextern void array_print( Array_t Array );#endifextern void array_to_string( LongString *plstr, Array_t Array );extern int skip_macro( int t );extern void skip_macro_2( void );  /* 17.11.97 rigo */extern int skip_member_macro( void );extern char *paf_type_to_string( int paf_type );extern char *get_comment( int lineno );extern char *find_comment( int lineno );extern void init_comment( void );  /* 07.04.97 rigo */extern void flush_comment( void );    /* 08.04.97 */extern char *StringToText( sString_t sString );extern void SetStatus( int depth, int value );extern char *identstring( int i );extern void Put_Macro( Token_t Token );extern void Put_Include( Token_t Token );#ifdef FUNCTION_MACROextern void step( int i );extern int token( int i );extern sString_t ident( int i );extern int identleng( int i );extern int f_lineno( int i );extern int f_charno( int i );#endifextern void f_read( int i );extern void f_read_end( void );extern void HighLightBeg( void );extern void HighLight( void );extern void HighLightEnd( void );extern void start_parser( char *filename_a, int is_cpp, FILE *pf_hig, int mode ){   if( yyfd == -1 )   {      return;   }   init_comment();   /* 07.04.97 rigo */   mode_g = mode;   filename_g = filename_a;   is_cpp_g = is_cpp;   keyw_cpp = is_cpp;      /* default keyword processing is equal to                              default keyword highlighting */   keyw_cpp_orig = keyw_cpp;   keyw_cpp_cnt = 0;   depth = 0;   ivt = 0;                   /* 12.11.97 rigo */   iva = 0;                   /* 12.11.97 rigo */   sIfstack[0].status = True;   niveau = 0;   bPutSymbol_m = True;   /* beolvassuk az egesz file-t */   if( f_ReadFile( yyfd ))   {      return;   }   if( mode == -1 )   {      Token_t Token;      while( True )      {         int lex;         Token = yylex();         lex = Token->lex;         f_TokenFreeAll( Token );         if( lex == 0 ) break;      }   }   else   {      while( token( 0 ) != 0 )      {         declaration( 0 );         if( niveau != 0 )         {#ifdef TEST            printf( "bad niveau: %d (line:%d)\n", niveau, f_lineno( 0 ));#endif         }      }   }   f_read_end();#ifndef PERFORMANCE_TEST   f_MacroFreeAll();#endif/*    f_TokenCheck(); */   flush_comment();     /* 08.04.97 */}extern void declaration( Declaration_t Declaration ){#ifdef rigo   if( keyw_cpp == keyw_cpp_orig )  /* not yet changes */#endif   {      if( keyw_cpp ) /* we are in cpp mode */      {      }      declaration_try = 1;/*    printf( "first try: %d mode from: %d.%d\n", keyw_cpp, f_lineno(0), f_charno(0) ); */      if( ! _declaration( Declaration ))      {         keyw_cpp = ! keyw_cpp;         declaration_try = 2;/*       printf( "second try: %d mode from: %d.%d\n", keyw_cpp, f_lineno(0), f_charno(0) ); */         if( _declaration( Declaration ))         {#ifdef TEST            printf( "change mode: %s (%d.%d)\n"                  , filename_g                  , f_lineno(0)                  , f_charno(0)                  );#endif         }         else         {            keyw_cpp = ! keyw_cpp;  /* restore mode *//*          printf( "third try: %d mode from: %d.%d\n", keyw_cpp, f_lineno(0), f_charno(0) ); */            declaration_try = 3;            if( ! _declaration( Declaration ))            {               skip_declaration();            }         }      }   }#ifdef rigo   else  /* already changed */   {      declaration_try = 3;      if( ! _declaration( Declaration ))

⌨️ 快捷键说明

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