Google
Web alhem.net
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

MyParser Class Reference

#include <MyParser.h>

Inheritance diagram for MyParser:

Inheritance graph
[legend]
Collaboration diagram for MyParser:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 MyParser (const std::string &path)
 ~MyParser ()
ScopeParser (FILE *fil, const std::string &name)

Private Member Functions

TokenAddToken (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

Constructor & Destructor Documentation

MyParser::MyParser const std::string &  path  ) 
 

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 }

MyParser::~MyParser  ) 
 

Definition at line 51 of file MyParser.cpp.

00052 {
00053 }


Member Function Documentation

Token * MyParser::AddToken int  ,
const std::string & 
[private]
 

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 }

Scope * MyParser::Parser FILE *  fil,
const std::string &  name
 

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 }


Member Data Documentation

bool MyParser::m_extern [private]
 

Definition at line 49 of file MyParser.h.

Referenced by AddToken(), and Parser().

std::string MyParser::m_path [private]
 

Definition at line 43 of file MyParser.h.

int MyParser::m_plevelm [private]
 

Definition at line 48 of file MyParser.h.

Referenced by Parser().

std::string MyParser::m_stfilename [private]
 

Definition at line 45 of file MyParser.h.

Referenced by AddToken(), and Parser().

int MyParser::m_stline [private]
 

Definition at line 46 of file MyParser.h.

Referenced by AddToken(), and Parser().

int MyParser::m_stpos [private]
 

Definition at line 47 of file MyParser.h.

Referenced by AddToken(), and Parser().

token_v MyParser::m_tokens [private]
 

Definition at line 44 of file MyParser.h.

Referenced by AddToken(), and Parser().


The documentation for this class was generated from the following files:
Generated for My SDL C++ Gui by doxygen 1.3.6