From: Mike D. Lowis Date: Fri, 11 May 2012 20:56:00 +0000 (-0400) Subject: Updated macro class for new style of macros X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=42ab8f6f7ccc4a5e6539b7578a453269d7a64278;p=archive%2Fdlang.git Updated macro class for new style of macros --- diff --git a/source/dlparser/dlparser.h b/source/dlparser/dlparser.h index 5e49310..1b01ea2 100644 --- a/source/dlparser/dlparser.h +++ b/source/dlparser/dlparser.h @@ -2,7 +2,6 @@ #define DLPARSER_H #include -#include #include "btparser.h" #include "dllexer.h" #include "macro.h" @@ -11,7 +10,7 @@ class DLParser : public BTParser { private: std::map core_forms; - std::set macros; + std::map macros; public: DLParser(); ~DLParser(); @@ -19,9 +18,6 @@ class DLParser : public BTParser 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 diff --git a/source/dlparser/macro/macro.cpp b/source/dlparser/macro/macro.cpp index 20171cf..6554616 100644 --- a/source/dlparser/macro/macro.cpp +++ b/source/dlparser/macro/macro.cpp @@ -1,24 +1,30 @@ #include "macro.h" -Macro::Macro() +Macro::Macro() : str_name(""), str_terminator("") { } -Macro::Macro(const std::list& 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::iterator Macro::begin() +const std::string& Macro::terminator() const { - return patterns.begin(); + return str_terminator; } -std::list::iterator Macro::end() +void Macro::terminator(std::string& term) { - return patterns.end(); + str_terminator = term; } diff --git a/source/dlparser/macro/macro.h b/source/dlparser/macro/macro.h index f5b62ae..06728f2 100644 --- a/source/dlparser/macro/macro.h +++ b/source/dlparser/macro/macro.h @@ -1,18 +1,23 @@ #ifndef MACRO_H #define MACRO_H -#include -#include "pattern.h" +#include class Macro { private: - std::list patterns; + std::string str_name; + std::string str_terminator; public: Macro(); - Macro(const std::list& patts); ~Macro(); - std::list::iterator begin(); - std::list::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 diff --git a/source/visitors/macroprocessor.cpp b/source/visitors/macroprocessor.cpp index dc058e6..ae631ba 100644 --- a/source/visitors/macroprocessor.cpp +++ b/source/visitors/macroprocessor.cpp @@ -1,6 +1,6 @@ #include "macroprocessor.h" -MacroProcessor::MacroProcessor(std::set ¯os) : macro_registry(macros) +MacroProcessor::MacroProcessor(std::map ¯os) : macro_registry(macros) { } @@ -24,7 +24,10 @@ void MacroProcessor::afterChildren(AST* cur, int depth) { 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; } } diff --git a/source/visitors/macroprocessor.h b/source/visitors/macroprocessor.h index a9ba0bd..99aae82 100644 --- a/source/visitors/macroprocessor.h +++ b/source/visitors/macroprocessor.h @@ -1,15 +1,16 @@ #ifndef MACRO_PROCESSOR_H #define MACRO_PROCESSOR_H -#include +#include #include "ivisitor.h" #include "dllexer.h" +#include "macro.h" class MacroProcessor : public IVisitor { protected: - std::set& macro_registry; + std::map& macro_registry; public: - MacroProcessor(std::set& macros); + MacroProcessor(std::map& macros); private: void beforeVisit(AST* cur, int depth); void afterVisit(AST* cur, int depth);