]>
Commit | Line | Data |
---|---|---|
1 | ///////////////////////////////////////////////////////////////////////////// | |
2 | // Name: No names yet. | |
3 | // Purpose: Implementation of C++/Java parser | |
4 | // compatible with SourceParserBase interface | |
5 | // Author: Aleksandras Gluchovas | |
6 | // Modified by: | |
7 | // Created: 22/09/98 | |
8 | // RCS-ID: $Id$ | |
9 | // Copyright: (c) Aleskandars Gluchovas | |
10 | // Licence: wxWindows licence | |
11 | ///////////////////////////////////////////////////////////////////////////// | |
12 | ||
13 | #ifndef __CJPARSESR_G__ | |
14 | #define __CJPARSESR_G__ | |
15 | ||
16 | #include "srcparser.h" | |
17 | ||
18 | #include <memory.h> | |
19 | #include <stdlib.h> | |
20 | #include <stdio.h> | |
21 | ||
22 | #if wxUSE_IOSTREAMH | |
23 | #include <iostream.h> | |
24 | #else | |
25 | #include <iostream> | |
26 | #endif | |
27 | ||
28 | // class parses given "memory-resident" Java or C++ source code | |
29 | // and captures information about classes/attrubutes/methods/ | |
30 | // arguments/etc into structures. Conforms with SourceParserBase | |
31 | // interface requirements. | |
32 | ||
33 | class CJSourceParser : public SourceParserBase | |
34 | { | |
35 | protected: | |
36 | // begining of the full-text area of the source file | |
37 | char* mpStart; | |
38 | ||
39 | // points to first character after the end | |
40 | // of teh full-text area | |
41 | char* mpEnd; | |
42 | ||
43 | // current "privacy level" | |
44 | int mCurVis; | |
45 | ||
46 | // current parsing position int full-text area | |
47 | char* cur; | |
48 | ||
49 | // about the current class | |
50 | bool mIsVirtual; | |
51 | bool mIsTemplate; | |
52 | size_t mNestingLevel; | |
53 | ||
54 | // context data for which is currently being collected | |
55 | spContext* mpCurCtx; | |
56 | ||
57 | int mCurCtxType; // type of the current context | |
58 | ||
59 | bool mCommentsOn; | |
60 | bool mMacrosOn; | |
61 | ||
62 | protected: | |
63 | ||
64 | void AttachComments( spContext& ctx, char* cur ); | |
65 | void ParseKeyword( char*& cur ); | |
66 | bool ParseNameAndRetVal( char*& cur, bool& isAMacro ); | |
67 | bool ParseArguments( char*& cur ); | |
68 | void ParseMemberVar( char*& cur ); | |
69 | void SkipFunction( char*& cur ); | |
70 | void SkipFunctionBody( char*& cur ); | |
71 | bool CheckVisibilty( char*& cur ); | |
72 | ||
73 | void AddClassNode( char*& cur ); | |
74 | void AddMacroNode( char*& cur ); | |
75 | void AddEnumNode( char*& cur ); | |
76 | void AddTypeDefNode( char*& cur ); | |
77 | ||
78 | void DumpOperationInfo( spOperation& info, const string& tab, wxSTD ostream& os ); | |
79 | void DumpClassHeader( spClass& info, wxSTD ostream& os ); | |
80 | void DumpClassBody( spClass& info, wxSTD ostream& os ); | |
81 | ||
82 | public: | |
83 | ||
84 | // NOTE:: discarding of macros or comments improves performance and | |
85 | // decreases memory usage | |
86 | ||
87 | CJSourceParser(bool collectCommnets = 1, | |
88 | bool collectMacros = 1); | |
89 | ||
90 | // returns the root-node of the created context tree | |
91 | // (user is responsible for releasing it from the heep) | |
92 | // "end" should point to the last (character + 1) of the | |
93 | // source text | |
94 | ||
95 | virtual spFile* Parse( char* start, char* end ); | |
96 | }; | |
97 | ||
98 | // inline'ed helpers used (just info): | |
99 | /* | |
100 | static inline void skip_to_eol( char*& cur ); | |
101 | static inline void skip_eol( char*& cur ); | |
102 | static inline bool skip_to_next_comment_in_the_line( char*& cur ); | |
103 | static void skip_to_prev_line( char*& cur ); | |
104 | static inline void skip_comments( char*& cur ); | |
105 | static inline void clear_commets_queue(); | |
106 | static inline void skip_quoted_string( char*& cur ); | |
107 | static inline bool get_next_token( char*& cur ); | |
108 | static inline void skip_preprocessor_dir( char*& cur ); | |
109 | static void skip_token( char*& cur ); | |
110 | static inline size_t get_token_len( char* tok ); | |
111 | static inline bool cmp_tokens( char* tok1, char* tok2 ); | |
112 | static inline bool cmp_tokens_fast( char* tok1, char* tok2, size_t len ); | |
113 | static inline void skip_tempalate_statement( char*& cur ); | |
114 | static inline void skip_statement( char*& cur ); | |
115 | static inline void skip_token_back( char*& cur ); | |
116 | static inline void skip_next_token_back( char*& cur ); | |
117 | static string get_token_str( char* cur ); | |
118 | static size_t skip_block( char*& cur ); | |
119 | static inline bool skip_imp_block( char*& cur ); | |
120 | static bool is_class_token( char*& cur ); | |
121 | inline static bool is_forward_decl( char* cur ); | |
122 | inline static bool is_function( char* cur, bool& isAMacro ); | |
123 | static inline void skip_scope_block( char*& cur ); | |
124 | static void arrange_indirection_tokens_between( string& type, string& identifier ); | |
125 | static bool is_keyword( char* cur ); | |
126 | static inline void get_string_between( char* start, char* end, string* pStr ); | |
127 | static char* set_comment_text( string& text, char* start ); | |
128 | */ | |
129 | ||
130 | #endif |