Pushed through use of some grammars
parent
47a44ee7db
commit
674344ea0e
|
@ -118,9 +118,11 @@ void Module::parseMarkup(const std::string& data) {
|
|||
// parse "gtsam::Pose2" and add to templateArgValues
|
||||
Qualified templateArgValue;
|
||||
vector<Qualified> templateArgValues;
|
||||
Rule templateArgValue_p =
|
||||
TypeGrammar(templateArgValue)
|
||||
[push_back_a( templateArgValues, templateArgValue)];
|
||||
TypeGrammar templateArgValue_g(templateArgValue);
|
||||
Rule templateArgValue_p = templateArgValue_g
|
||||
[assign_a(templateArgValue.category, Qualified::VOID)] // TODO: why ?
|
||||
[push_back_a(templateArgValues, templateArgValue)]
|
||||
[clear_a(templateArgValue)];
|
||||
|
||||
// template<CALIBRATION = {gtsam::Cal3DS2}>
|
||||
string templateArgName;
|
||||
|
@ -132,17 +134,20 @@ void Module::parseMarkup(const std::string& data) {
|
|||
|
||||
// parse "gtsam::Pose2" and add to singleInstantiation.typeList
|
||||
TemplateInstantiationTypedef singleInstantiation, singleInstantiation0;
|
||||
Rule templateSingleInstantiationArg_p =
|
||||
TypeGrammar(templateArgValue)
|
||||
[push_back_a(singleInstantiation.typeList, templateArgValue)];
|
||||
Rule templateSingleInstantiationArg_p = templateArgValue_g
|
||||
[push_back_a(singleInstantiation.typeList, templateArgValue)]
|
||||
[clear_a(templateArgValue)];
|
||||
|
||||
// typedef gtsam::RangeFactor<gtsam::Pose2, gtsam::Point2> RangeFactorPosePoint2;
|
||||
vector<string> namespaces; // current namespace tag
|
||||
TypeGrammar instantiationClass_g(singleInstantiation.class_);
|
||||
Rule templateSingleInstantiation_p =
|
||||
(str_p("typedef") >>
|
||||
TypeGrammar(singleInstantiation.class_) >>
|
||||
'<' >> templateSingleInstantiationArg_p >> *(',' >> templateSingleInstantiationArg_p) >> '>' >>
|
||||
TypeGrammar(singleInstantiation) >>
|
||||
(str_p("typedef") >> instantiationClass_g >>
|
||||
'<' >> templateSingleInstantiationArg_p >> *(',' >> templateSingleInstantiationArg_p) >>
|
||||
'>' >>
|
||||
basic.className_p[assign_a(singleInstantiation.name_)] >>
|
||||
';')
|
||||
[assign_a(singleInstantiation.namespaces_, namespaces)]
|
||||
[push_back_a(templateInstantiationTypedefs, singleInstantiation)]
|
||||
[assign_a(singleInstantiation, singleInstantiation0)];
|
||||
|
||||
|
@ -152,30 +157,27 @@ void Module::parseMarkup(const std::string& data) {
|
|||
'<' >> basic.name_p[push_back_a(cls.templateArgs)] >> *(',' >> basic.name_p[push_back_a(cls.templateArgs)]) >>
|
||||
'>');
|
||||
|
||||
// Argument list
|
||||
// NOTE: allows for pointers to all types
|
||||
ArgumentList args;
|
||||
ArgumentListGrammar argumentlist_g(args);
|
||||
Argument arg,arg0;
|
||||
ArgumentGrammar argument_g(arg);
|
||||
Rule argument_p = argument_g[push_back_a(args, arg)][assign_a(arg, arg0)];
|
||||
|
||||
Rule argumentList_p = !argument_p >> * (',' >> argument_p);
|
||||
|
||||
// parse class constructor
|
||||
Constructor constructor0(verbose), constructor(verbose);
|
||||
Rule constructor_p =
|
||||
(basic.className_p >> '(' >> argumentlist_g >> ')' >> ';' >> !basic.comments_p)
|
||||
(basic.className_p >> '(' >> argumentList_p >> ')' >> ';' >> !basic.comments_p)
|
||||
[bl::bind(&Constructor::push_back, bl::var(constructor), bl::var(args))]
|
||||
[clear_a(args)];
|
||||
|
||||
ReturnType retType0, retType;
|
||||
Rule returnType_p = TypeGrammar(retType);
|
||||
|
||||
vector<string> namespaces_return; /// namespace for current return type
|
||||
Rule namespace_ret_p = basic.namespace_p[push_back_a(namespaces_return)] >> str_p("::");
|
||||
|
||||
ReturnValue retVal0, retVal;
|
||||
Rule returnType1_p = returnType_p[assign_a(retVal.type1,retType)][assign_a(retType,retType0)];
|
||||
Rule returnType2_p = returnType_p[assign_a(retVal.type2,retType)][assign_a(retType,retType0)];
|
||||
ReturnValueGrammar returnValue_g(retVal);
|
||||
|
||||
Rule pair_p =
|
||||
(str_p("pair") >> '<' >> returnType1_p >> ',' >> returnType2_p >> '>')
|
||||
[assign_a(retVal.isPair,true)];
|
||||
|
||||
Rule returnValue_p = pair_p | returnType1_p;
|
||||
|
||||
Rule methodName_p = lexeme_d[(upper_p | lower_p) >> *(alnum_p | '_')];
|
||||
|
||||
// gtsam::Values retract(const gtsam::VectorValues& delta) const;
|
||||
|
@ -183,8 +185,8 @@ void Module::parseMarkup(const std::string& data) {
|
|||
bool isConst, isConst0 = false;
|
||||
Rule method_p =
|
||||
!templateArgValues_p >>
|
||||
(returnValue_p >> methodName_p[assign_a(methodName)] >>
|
||||
'(' >> argumentlist_g >> ')' >>
|
||||
(returnValue_g >> methodName_p[assign_a(methodName)] >>
|
||||
'(' >> argumentList_p >> ')' >>
|
||||
!str_p("const")[assign_a(isConst,true)] >> ';' >> *basic.comments_p)
|
||||
[bl::bind(&Class::addMethod, bl::var(cls), verbose, bl::var(isConst),
|
||||
bl::var(methodName), bl::var(args), bl::var(retVal),
|
||||
|
@ -197,8 +199,8 @@ void Module::parseMarkup(const std::string& data) {
|
|||
Rule staticMethodName_p = lexeme_d[(upper_p | lower_p) >> *(alnum_p | '_')];
|
||||
|
||||
Rule static_method_p =
|
||||
(str_p("static") >> returnValue_p >> staticMethodName_p[assign_a(methodName)] >>
|
||||
'(' >> argumentlist_g >> ')' >> ';' >> *basic.comments_p)
|
||||
(str_p("static") >> returnValue_g >> staticMethodName_p[assign_a(methodName)] >>
|
||||
'(' >> argumentList_p >> ')' >> ';' >> *basic.comments_p)
|
||||
[bl::bind(&StaticMethod::addOverload,
|
||||
bl::var(cls.static_methods)[bl::var(methodName)],
|
||||
bl::var(methodName), bl::var(args), bl::var(retVal), Qualified(),verbose)]
|
||||
|
@ -208,7 +210,6 @@ void Module::parseMarkup(const std::string& data) {
|
|||
Rule functions_p = constructor_p | method_p | static_method_p;
|
||||
|
||||
// parse a full class
|
||||
vector<string> namespaces; // current namespace tag
|
||||
vector<Qualified> templateInstantiations;
|
||||
Rule class_p =
|
||||
eps_p[assign_a(cls,cls0)]
|
||||
|
@ -237,8 +238,8 @@ void Module::parseMarkup(const std::string& data) {
|
|||
// parse a global function
|
||||
Qualified globalFunction;
|
||||
Rule global_function_p =
|
||||
(returnValue_p >> staticMethodName_p[assign_a(globalFunction.name_)] >>
|
||||
'(' >> argumentlist_g >> ')' >> ';' >> *basic.comments_p)
|
||||
(returnValue_g >> staticMethodName_p[assign_a(globalFunction.name_)] >>
|
||||
'(' >> argumentList_p >> ')' >> ';' >> *basic.comments_p)
|
||||
[assign_a(globalFunction.namespaces_,namespaces)]
|
||||
[bl::bind(&GlobalFunction::addOverload,
|
||||
bl::var(global_functions)[bl::var(globalFunction.name_)],
|
||||
|
@ -256,7 +257,7 @@ void Module::parseMarkup(const std::string& data) {
|
|||
|
||||
Rule namespace_def_p =
|
||||
(str_p("namespace")
|
||||
>> basic.namepsace_p[push_back_a(namespaces)]
|
||||
>> basic.namespace_p[push_back_a(namespaces)]
|
||||
>> ch_p('{')
|
||||
>> *(include_p | class_p | templateSingleInstantiation_p | global_function_p | namespace_def_p | basic.comments_p)
|
||||
>> ch_p('}'))
|
||||
|
@ -271,7 +272,7 @@ void Module::parseMarkup(const std::string& data) {
|
|||
Rule forward_declaration_p =
|
||||
!(str_p("virtual")[assign_a(fwDec.isVirtual, true)])
|
||||
>> str_p("class")
|
||||
>> (*(basic.namepsace_p >> str_p("::")) >> basic.className_p)[assign_a(fwDec.name)]
|
||||
>> (*(basic.namespace_p >> str_p("::")) >> basic.className_p)[assign_a(fwDec.name)]
|
||||
>> ch_p(';')
|
||||
[push_back_a(forward_declarations, fwDec)]
|
||||
[assign_a(fwDec, fwDec0)];
|
||||
|
@ -284,7 +285,6 @@ void Module::parseMarkup(const std::string& data) {
|
|||
|
||||
//----------------------------------------------------------------------------
|
||||
// for debugging, define BOOST_SPIRIT_DEBUG
|
||||
#define BOOST_SPIRIT_DEBUG
|
||||
# ifdef BOOST_SPIRIT_DEBUG
|
||||
BOOST_SPIRIT_DEBUG_NODE(className_p);
|
||||
BOOST_SPIRIT_DEBUG_NODE(classPtr_p);
|
||||
|
@ -298,7 +298,7 @@ void Module::parseMarkup(const std::string& data) {
|
|||
BOOST_SPIRIT_DEBUG_NODE(returnType2_p);
|
||||
BOOST_SPIRIT_DEBUG_NODE(pair_p);
|
||||
BOOST_SPIRIT_DEBUG_NODE(void_p);
|
||||
BOOST_SPIRIT_DEBUG_NODE(returnValue_p);
|
||||
BOOST_SPIRIT_DEBUG_NODE(returnValue_g);
|
||||
BOOST_SPIRIT_DEBUG_NODE(methodName_p);
|
||||
BOOST_SPIRIT_DEBUG_NODE(method_p);
|
||||
BOOST_SPIRIT_DEBUG_NODE(class_p);
|
||||
|
@ -312,8 +312,9 @@ void Module::parseMarkup(const std::string& data) {
|
|||
if(!info.full) {
|
||||
printf("parsing stopped at \n%.20s\n",info.stop);
|
||||
cout << "Stopped near:\n"
|
||||
"class '" << cls.name() << "'\n"
|
||||
"method '" << methodName << endl;
|
||||
"class '" << cls.name_ << "'\n"
|
||||
"method '" << methodName << "'\n"
|
||||
"argument '" << arg.name << "'" << endl;
|
||||
throw ParseFailed((int)info.length);
|
||||
}
|
||||
|
||||
|
@ -481,7 +482,7 @@ vector<Class> Module::ExpandTypedefInstantiations(const vector<Class>& classes,
|
|||
vector<string> Module::GenerateValidTypes(const vector<Class>& classes, const vector<ForwardDeclaration> forwardDeclarations) {
|
||||
vector<string> validTypes;
|
||||
BOOST_FOREACH(const ForwardDeclaration& fwDec, forwardDeclarations) {
|
||||
validTypes.push_back(fwDec.name);
|
||||
validTypes.push_back(fwDec.name);
|
||||
}
|
||||
validTypes.push_back("void");
|
||||
validTypes.push_back("string");
|
||||
|
|
Loading…
Reference in New Issue