#include <MyParser.h>
Inheritance diagram for MyParser:
Public Member Functions | |
MyParser (const std::string &path) | |
~MyParser () | |
Scope * | Parser (FILE *fil, const std::string &name) |
Private Member Functions | |
Token * | AddToken (int, const std::string &) |
Private Attributes | |
std::string | m_path |
token_v | m_tokens |
std::string | m_stfilename |
int | m_stline |
int | m_stpos |
int | m_plevelm |
bool | m_extern |
|
Definition at line 39 of file MyParser.cpp.
00040 :BaseParser() 00041 ,m_path(path) 00042 ,m_stfilename("") 00043 ,m_stline(0) 00044 ,m_stpos(0) 00045 ,m_plevelm(0) 00046 ,m_extern(false) 00047 { 00048 } |
|
Definition at line 51 of file MyParser.cpp.
00052 { 00053 } |
|
Definition at line 222 of file MyParser.cpp. References BaseParser::GetFilename(), BaseParser::GetLine(), BaseParser::GetPos(), m_extern, m_stfilename, m_stline, m_stpos, m_tokens, and WHITESPACE. Referenced by Parser().
00223 { 00224 if (!m_tokens.size() && c == WHITESPACE) 00225 return NULL; 00226 Token *t = new Token(c,val); 00227 if (!m_tokens.size()) 00228 { 00229 m_stfilename = GetFilename(); 00230 m_stline = GetLine(); 00231 m_stpos = GetPos(); 00232 if (m_stfilename[0] == '/') 00233 m_extern = true; 00234 else 00235 m_extern = false; 00236 } 00237 m_tokens.push_back(t); 00238 return t; 00239 } |
|
Definition at line 66 of file MyParser.cpp. References AddToken(), Class, COMMENT, CPP, BaseParser::EndToken(), BaseParser::GetToken(), m_extern, m_plevelm, m_stfilename, m_stline, m_stpos, m_tokens, BaseParser::preprocessor(), and Template. Referenced by parse_file().
00067 { 00068 int c; 00069 std::string val; 00070 std::string strClass; 00071 bool append_next_statement = false; 00072 Scope *s = new Scope; 00073 Scope *current = s; 00074 00075 for (;;) 00076 { 00077 val = ""; 00078 c = GetToken(fil,val); 00079 if (!c) // eof 00080 { 00081 break; 00082 } 00083 if (c == CPP) 00084 { 00085 preprocessor( val ); 00086 } 00087 switch (c) 00088 { 00089 case COMMENT: 00090 if (!m_tokens.size()) 00091 { 00092 AddToken(c,val); 00093 // 00094 Statement *s = new Statement(m_tokens); 00095 // set file, line 00096 s -> SetParent(current); 00097 s -> SetFile(m_stfilename); 00098 s -> SetLine(m_stline); 00099 s -> SetPos(m_stpos); 00100 s -> SetExtern(m_extern); 00101 current -> Add(s); 00102 // 00103 while (m_tokens.size()) 00104 m_tokens.erase(m_tokens.begin()); 00105 m_plevelm = m_plevel; 00106 } 00107 else 00108 { 00109 AddToken(c,val); 00110 } 00111 break; 00112 case ':': // public, protected, private, case 00113 AddToken(c,val); 00114 { 00115 token_v::iterator it = m_tokens.begin(); 00116 Token *t = *it; 00117 if (t && 00118 t -> GetCode() != Class && 00119 t -> GetCode() != Template) 00120 { 00121 Statement *s = new Statement(m_tokens); 00122 // set file, line 00123 s -> SetParent(current); 00124 s -> SetFile(m_stfilename); 00125 s -> SetLine(m_stline); 00126 s -> SetPos(m_stpos); 00127 s -> SetExtern(m_extern); 00128 current -> Add(s); 00129 // 00130 while (m_tokens.size()) 00131 m_tokens.erase(m_tokens.begin()); 00132 m_plevelm = m_plevel; 00133 } 00134 } 00135 break; 00136 case ';': 00137 AddToken(c,val); 00138 if (m_plevel == m_plevelm) 00139 { 00140 if (append_next_statement) 00141 { 00142 current -> AddTrail(m_tokens); 00143 current = current -> GetParent(); 00144 append_next_statement = false; 00145 } 00146 else 00147 { 00148 Statement *s = new Statement(m_tokens); 00149 // set file, line 00150 s -> SetParent(current); 00151 s -> SetFile(m_stfilename); 00152 s -> SetLine(m_stline); 00153 s -> SetPos(m_stpos); 00154 s -> SetExtern(m_extern); 00155 current -> Add(s); 00156 } 00157 // 00158 while (m_tokens.size()) 00159 m_tokens.erase(m_tokens.begin()); 00160 m_plevelm = m_plevel; 00161 } 00162 break; 00163 case '{': 00164 { 00165 Scope *s = new Scope(m_tokens); 00166 // set file, line 00167 s -> SetParent(current); 00168 s -> SetFile(m_stfilename); 00169 s -> SetLine(m_stline); 00170 s -> SetPos(m_stpos); 00171 s -> SetExtern(m_extern); 00172 current -> Add(s); 00173 // 00174 current = s; 00175 // 00176 while (m_tokens.size()) 00177 m_tokens.erase(m_tokens.begin()); 00178 m_plevelm = m_plevel; 00179 } 00180 break; 00181 case '}': 00182 // enum fix 00183 if (m_tokens.size()) 00184 { 00185 Statement *s = new Statement(m_tokens); 00186 // set file, line 00187 s -> SetParent(current); 00188 s -> SetFile(m_stfilename); 00189 s -> SetLine(m_stline); 00190 s -> SetPos(m_stpos); 00191 s -> SetExtern(m_extern); 00192 current -> Add(s); 00193 // 00194 while (m_tokens.size()) 00195 m_tokens.erase(m_tokens.begin()); 00196 m_plevelm = m_plevel; 00197 } 00198 if (current -> Trail()) 00199 { 00200 append_next_statement = true; 00201 } 00202 else 00203 { 00204 current = current -> GetParent(); 00205 } 00206 break; 00207 default: 00208 if (c != CPP) 00209 { 00210 AddToken(c,val); 00211 } 00212 break; 00213 } 00214 // 00215 EndToken(c); 00216 } 00217 00218 return s; 00219 } |
|
Definition at line 49 of file MyParser.h. Referenced by AddToken(), and Parser(). |
|
Definition at line 43 of file MyParser.h. |
|
Definition at line 48 of file MyParser.h. Referenced by Parser(). |
|
Definition at line 45 of file MyParser.h. Referenced by AddToken(), and Parser(). |
|
Definition at line 46 of file MyParser.h. Referenced by AddToken(), and Parser(). |
|
Definition at line 47 of file MyParser.h. Referenced by AddToken(), and Parser(). |
|
Definition at line 44 of file MyParser.h. Referenced by AddToken(), and Parser(). |