#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(). |
1.3.6