diff --git a/TokenDefinition.cc b/TokenDefinition.cc new file mode 100644 index 0000000..70fe29e --- /dev/null +++ b/TokenDefinition.cc @@ -0,0 +1,37 @@ + +#include + +#include +#include + +#include "TokenDefinition.h" + +using namespace std; + +TokenDefinition::TokenDefinition() + : m_re(NULL) +{ +} + +TokenDefinition::~TokenDefinition() +{ + if (m_re != NULL) + { + pcre_free(m_re); + } +} + +bool TokenDefinition::create(const string & name, + const string & definition, const string & flags) +{ + const char * errptr; + int erroffset; + m_re = pcre_compile(definition.c_str(), 0, &errptr, &erroffset, NULL); + if (m_re == NULL) + { + cerr << "Error compiling regular expression '" << definition + << "' at position " << erroffset << ": " << errptr << endl; + return false; + } + return true; +} diff --git a/TokenDefinition.h b/TokenDefinition.h new file mode 100644 index 0000000..11bf8e1 --- /dev/null +++ b/TokenDefinition.h @@ -0,0 +1,21 @@ + +#ifndef TOKENDEFINITION_H +#define TOKENDEFINITION_H + +#include + +#include + +class TokenDefinition +{ + public: + TokenDefinition(); + ~TokenDefinition(); + bool create(const std::string & name, + const std::string & definition, const std::string & flags); + + protected: + pcre * m_re; +}; + +#endif diff --git a/parse-input.cc b/parse-input.cc index 17ce936..a6c4eff 100644 --- a/parse-input.cc +++ b/parse-input.cc @@ -8,6 +8,7 @@ #include #include "parse-input.h" +#include "TokenDefinition.h" using namespace std; @@ -126,7 +127,17 @@ bool parse_input(char * buff, int size) flags = string(line, ovector[6], ovector[7] - ovector[6]); } - /* TODO: process token */ + refptr td = new TokenDefinition(); + if (td->create(name, definition, flags)) + { + /* TODO: do something with td */ + } + else + { + cerr << "Error in token definition ending on line " + << lineno << endl; + return false; + } } else { @@ -155,5 +166,10 @@ bool parse_input(char * buff, int size) lineno++; } + pcre_free(empty); + pcre_free(comment); + pcre_free(section_name); + pcre_free(token); + pcre_free(rule); return true; }