d12e353663
a) #if/#ifdef/#else (very) limited support b) param type fix - now indirection chars are correctly handled c) class/struct/union distinction d) public/private fixes e) Dump() function added - very useful for debugging 2. option to ignore parameter names during 'diff' (in fact, they're ignored by default, and this option switches it on) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1744 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
126 lines
4.1 KiB
C++
126 lines
4.1 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: No names yet.
|
|
// Purpose: Implementation of C++/Java parser
|
|
// compatible with SourceParserBase interface
|
|
// Author: Aleksandras Gluchovas
|
|
// Modified by:
|
|
// Created: 22/09/98
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Aleskandars Gluchovas
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __CJPARSESR_G__
|
|
#define __CJPARSESR_G__
|
|
|
|
#include "srcparser.h"
|
|
|
|
#include <iostream.h>
|
|
#include <memory.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
// class parses given "memory-resident" Java or C++ source code
|
|
// and captures information about classes/attrubutes/methods/
|
|
// arguments/etc into structures. Conforms with SourceParserBase
|
|
// interface requirements.
|
|
|
|
class CJSourceParser : public SourceParserBase
|
|
{
|
|
protected:
|
|
// begining of the full-text area of the source file
|
|
char* mpStart;
|
|
|
|
// points to first character after the end
|
|
// of teh full-text area
|
|
char* mpEnd;
|
|
|
|
// current "privacy level"
|
|
int mCurVis;
|
|
|
|
// current parsing position int full-text area
|
|
char* cur;
|
|
|
|
// about the current class
|
|
bool mIsVirtual;
|
|
bool mIsTemplate;
|
|
size_t mNestingLevel;
|
|
|
|
// context data for which is currently being collected
|
|
spContext* mpCurCtx;
|
|
|
|
int mCurCtxType; // type of the current context
|
|
|
|
bool mCommentsOn;
|
|
bool mMacrosOn;
|
|
|
|
protected:
|
|
|
|
void AttachComments( spContext& ctx, char* cur );
|
|
void ParseKeyword( char*& cur );
|
|
bool ParseNameAndRetVal( char*& cur, bool& isAMacro );
|
|
bool ParseArguments( char*& cur );
|
|
void ParseMemberVar( char*& cur );
|
|
void SkipFunction( char*& cur );
|
|
void SkipFunctionBody( char*& cur );
|
|
bool CheckVisibilty( char*& cur );
|
|
|
|
void AddClassNode( char*& cur );
|
|
void AddMacroNode( char*& cur );
|
|
void AddEnumNode( char*& cur );
|
|
void AddTypeDefNode( char*& cur );
|
|
|
|
void DumpOperationInfo( spOperation& info, const string& tab, ostream& os );
|
|
void DumpClassHeader( spClass& info, ostream& os );
|
|
void DumpClassBody( spClass& info, ostream& os );
|
|
|
|
public:
|
|
|
|
// NOTE:: discarding of macros or comments improves performance and
|
|
// decreases memory usage
|
|
|
|
CJSourceParser(bool collectCommnets = 1,
|
|
bool collectMacros = 1);
|
|
|
|
// returns the root-node of the created context tree
|
|
// (user is responsible for releasing it from the heep)
|
|
// "end" should point to the last (character + 1) of the
|
|
// source text
|
|
|
|
virtual spFile* Parse( char* start, char* end );
|
|
};
|
|
|
|
// inline'ed helpers used (just info):
|
|
/*
|
|
static inline void skip_to_eol( char*& cur );
|
|
static inline void skip_eol( char*& cur );
|
|
static inline bool skip_to_next_comment_in_the_line( char*& cur );
|
|
static void skip_to_prev_line( char*& cur );
|
|
static inline void skip_comments( char*& cur );
|
|
static inline void clear_commets_queue();
|
|
static inline void skip_quoted_string( char*& cur );
|
|
static inline bool get_next_token( char*& cur );
|
|
static inline void skip_preprocessor_dir( char*& cur );
|
|
static void skip_token( char*& cur );
|
|
static inline size_t get_token_len( char* tok );
|
|
static inline bool cmp_tokens( char* tok1, char* tok2 );
|
|
static inline bool cmp_tokens_fast( char* tok1, char* tok2, size_t len );
|
|
static inline void skip_tempalate_statement( char*& cur );
|
|
static inline void skip_statement( char*& cur );
|
|
static inline void skip_token_back( char*& cur );
|
|
static inline void skip_next_token_back( char*& cur );
|
|
static string get_token_str( char* cur );
|
|
static size_t skip_block( char*& cur );
|
|
static inline bool skip_imp_block( char*& cur );
|
|
static bool is_class_token( char*& cur );
|
|
inline static bool is_forward_decl( char* cur );
|
|
inline static bool is_function( char* cur, bool& isAMacro );
|
|
static inline void skip_scope_block( char*& cur );
|
|
static void arrange_indirection_tokens_between( string& type, string& identifier );
|
|
static bool is_keyword( char* cur );
|
|
static inline void get_string_between( char* start, char* end, string* pStr );
|
|
static char* set_comment_text( string& text, char* start );
|
|
*/
|
|
|
|
#endif
|