From 3f3dd81e679bfc26817852fea623e49f65dc1bb2 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 21 May 2010 09:46:17 -0400 Subject: [PATCH] added TokenDefinition::getIdentifier() and replacement buildToken --- Parser.cc | 17 ++++++++++++++++- Parser.h | 1 + TokenDefinition.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Parser.cc b/Parser.cc index 19d4cb1..7deb56e 100644 --- a/Parser.cc +++ b/Parser.cc @@ -51,7 +51,7 @@ bool Parser::write(const string & fname) { char buff[20]; sprintf(buff, "%d", i++); - makeDefine(string("TK_") + (*it)->getName(), buff); + makeDefine((*it)->getIdentifier(), buff); *token_classes += (*it)->getClassDefinition(); *token_classes_code += (*it)->getProcessMethod(); } @@ -63,6 +63,7 @@ bool Parser::write(const string & fname) /* set up replacements */ setReplacement("token_list", buildTokenList()); + setReplacement("buildToken", buildBuildToken()); setReplacement("header_name", new string(string("\"") + header_fname + "\"")); setReplacement("token_code", m_token_code); @@ -148,6 +149,20 @@ refptr Parser::buildTokenList() return tokenlist; } +refptr Parser::buildBuildToken() +{ + refptr buildToken = new string(); + for (list::const_iterator t = m_tokens.begin(); + t != m_tokens.end(); + t++) + { + *buildToken += "case " + (*t)->getIdentifier() + ":\n"; + *buildToken += " token = new " + (*t)->getName() + "();\n"; + *buildToken += " break;\n"; + } + return buildToken; +} + bool Parser::parseInputFile(char * buff, int size) { typedef pcre * pcre_ptr; diff --git a/Parser.h b/Parser.h index 12b4eb2..2ac794a 100644 --- a/Parser.h +++ b/Parser.h @@ -37,6 +37,7 @@ class Parser protected: refptr buildTokenList(); + refptr buildBuildToken(); bool writeTmpl(std::ostream & out, char * dat, int len); refptr getReplacement(const std::string & name); void setReplacement(const std::string & name, refptr val) diff --git a/TokenDefinition.h b/TokenDefinition.h index 3d94b2f..f16ab26 100644 --- a/TokenDefinition.h +++ b/TokenDefinition.h @@ -21,6 +21,7 @@ class TokenDefinition std::string getCode() const { return m_code; } std::string getClassDefinition() const; std::string getProcessMethod() const; + std::string getIdentifier() { return std::string("TK_") + m_name; } protected: std::string m_name;