#define DLPARSER_H
#include <map>
-#include <set>
#include "btparser.h"
#include "dllexer.h"
#include "macro.h"
{
private:
std::map<std::string,eTokenTypes> core_forms;
- std::set<std::string> macros;
+ std::map<std::string,Macro*> macros;
public:
DLParser();
~DLParser();
bool isCoreFormName(void);
eTokenTypes getCoreFormId(void);
void parse(void);
- bool isMacro(Token& token);
- bool speculate_GroupExpr(void);
- bool speculate_MacroPatternMatch(Pattern patt);
private:
// Entry Rules
#include "macro.h"
-Macro::Macro()
+Macro::Macro() : str_name(""), str_terminator("")
{
}
-Macro::Macro(const std::list<Pattern>& patts) : patterns(patts)
+Macro::~Macro()
{
}
-Macro::~Macro()
+const std::string& Macro::name() const
+{
+ return str_name;
+}
+
+void Macro::name(std::string& name)
{
+ str_name = name;
}
-std::list<Pattern>::iterator Macro::begin()
+const std::string& Macro::terminator() const
{
- return patterns.begin();
+ return str_terminator;
}
-std::list<Pattern>::iterator Macro::end()
+void Macro::terminator(std::string& term)
{
- return patterns.end();
+ str_terminator = term;
}
#ifndef MACRO_H
#define MACRO_H
-#include <list>
-#include "pattern.h"
+#include <string>
class Macro {
private:
- std::list<Pattern> patterns;
+ std::string str_name;
+ std::string str_terminator;
public:
Macro();
- Macro(const std::list<Pattern>& patts);
~Macro();
- std::list<Pattern>::iterator begin();
- std::list<Pattern>::iterator end();
+ const std::string& name() const;
+ void name(std::string& name);
+ //const std::string& keywords() const;
+ //void keywords(std::string& nm);
+ const std::string& terminator() const;
+ void terminator(std::string& term);
+ //const std::string& transforms() const;
+ //void transforms(std::string& nm);
};
#endif
#include "macroprocessor.h"
-MacroProcessor::MacroProcessor(std::set<std::string> ¯os) : macro_registry(macros)
+MacroProcessor::MacroProcessor(std::map<std::string,Macro*> ¯os) : macro_registry(macros)
{
}
{
if (cur->type() == MACRO)
{
- macro_registry.insert( (*(cur->children()->begin()))->text() );
+ std::string name = (*(cur->children()->begin()))->text();
+ Macro* macro = new Macro();
+ macro->name( name );
+ macro_registry[ macro->name() ] = macro;
}
}
#ifndef MACRO_PROCESSOR_H
#define MACRO_PROCESSOR_H
-#include <set>
+#include <map>
#include "ivisitor.h"
#include "dllexer.h"
+#include "macro.h"
class MacroProcessor : public IVisitor {
protected:
- std::set<std::string>& macro_registry;
+ std::map<std::string,Macro*>& macro_registry;
public:
- MacroProcessor(std::set<std::string>& macros);
+ MacroProcessor(std::map<std::string,Macro*>& macros);
private:
void beforeVisit(AST* cur, int depth);
void afterVisit(AST* cur, int depth);