diff --git a/wrap/Qualified.h b/wrap/Qualified.h index abc498de9..31a984f41 100644 --- a/wrap/Qualified.h +++ b/wrap/Qualified.h @@ -18,6 +18,13 @@ #pragma once +#include +#include +#include +#include + +namespace classic = BOOST_SPIRIT_CLASSIC_NS; + #include #include @@ -79,15 +86,6 @@ struct Qualified { }; -} // \namespace wrap - -#include -#include -#include -#include - -namespace classic = BOOST_SPIRIT_CLASSIC_NS; - template struct basic_rules { @@ -120,34 +118,14 @@ struct basic_rules { // http://boost-spirit.com/distrib/spirit_1_8_2/libs/spirit/doc/grammar.html struct classname_grammar: public classic::grammar { - /// Definition of type grammar template - struct definition { - - typedef classic::rule Rule; - - Rule basisType_p, eigenType_p, keywords_p, stlType_p, className_p; + struct definition: basic_rules { definition(classname_grammar const& self) { - - using namespace classic; - - basisType_p = (str_p("string") | "bool" | "size_t" | "int" | "double" - | "char" | "unsigned char"); - - eigenType_p = (str_p("Vector") | "Matrix"); - - keywords_p = (str_p("const") | "static" | "namespace" | "void" - | basisType_p); - - stlType_p = (str_p("vector") | "list"); - - className_p = (lexeme_d[upper_p >> *(alnum_p | '_')] - eigenType_p - - keywords_p) | stlType_p; } - Rule const& start() const { - return className_p; + classic::rule const& start() const { + return basic_rules::className_p; } }; @@ -166,12 +144,12 @@ struct type_grammar: public classic::grammar { /// Definition of type grammar template - struct definition { + struct definition: basic_rules { typedef classic::rule Rule; - Rule void_p, basisType_p, eigenType_p, keywords_p, namepsace_p, - namespace_del_p, class_p, type_p; + Rule void_p, my_basisType_p, my_eigenType_p, namespace_del_p, class_p, + type_p; definition(type_grammar const& self) { @@ -187,27 +165,23 @@ struct type_grammar: public classic::grammar { void_p = str_p("void")[assign_a(self.result_.name)] // [assign_a(self.result_.category, VOID)]; - basisType_p = (str_p("string") | "bool" | "size_t" | "int" | "double" - | "char" | "unsigned char")[assign_a(self.result_.name)] // + my_basisType_p = basic_rules::basisType_p // + [assign_a(self.result_.name)] // [assign_a(self.result_.category, BASIS)]; - eigenType_p = (str_p("Vector") | "Matrix")[assign_a(self.result_.name)] // + my_eigenType_p = basic_rules::eigenType_p // + [assign_a(self.result_.name)] // [assign_a(self.result_.category, EIGEN)]; - keywords_p = (str_p("const") | "static" | "namespace" | "void" - | basisType_p); + namespace_del_p = basic_rules::namepsace_p // + [push_back_a(self.result_.namespaces)] >> str_p("::"); - namepsace_p = lexeme_d[lower_p >> *(alnum_p | '_')] - keywords_p; - - namespace_del_p = namepsace_p[push_back_a(self.result_.namespaces)] - >> str_p("::"); - - class_p = *namespace_del_p >> self.classname_g // + class_p = *namespace_del_p >> basic_rules::className_p // [assign_a(self.result_.name)] // [assign_a(self.result_.category, CLASS)]; type_p = eps_p[clear_a(self.result_)] // - >> void_p | basisType_p | eigenType_p | class_p; + >> void_p | my_basisType_p | my_eigenType_p | class_p; } Rule const& start() const { @@ -218,3 +192,5 @@ struct type_grammar: public classic::grammar { }; // type_grammar +} // \namespace wrap +