diff options
author | sbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2013-02-25 16:54:00 +0000 |
---|---|---|
committer | sbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2013-02-25 16:54:00 +0000 |
commit | 4730bc03f50318da9432bbd17f7c9cc91de1eb21 (patch) | |
tree | 740a46e73a289157f7cc45e281ecfdfb686977e5 /src/piraha/Lookup.cc | |
parent | f9f8fb05dc03fa339e37a04608009f62e4fcc3b0 (diff) |
Change the parameter parser to Piraha
git-svn-id: http://svn.cactuscode.org/flesh/trunk@4960 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/piraha/Lookup.cc')
-rw-r--r-- | src/piraha/Lookup.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/piraha/Lookup.cc b/src/piraha/Lookup.cc new file mode 100644 index 00000000..ed42e1d1 --- /dev/null +++ b/src/piraha/Lookup.cc @@ -0,0 +1,30 @@ +#include "Piraha.hpp" + +Lookup::Lookup(std::string name_,smart_ptr<Grammar> g) : gram(g), name(name_), capture(true) { + if(name[0] == '-') { + capture = false; + name = name.substr(1); + } +} + +bool Lookup::match(Matcher *m) { + smart_ptr<Pattern> p = gram->patterns.get(name); + if(!p.valid()) std::cout << "Lookup of pattern [" << name << "] failed. Jmap = " << gram->patterns << std::endl; + assert(p.valid()); + vector<smart_ptr<Group> > chSave = m->children; + m->children.clear(); + int s = m->pos; + std::string save_name = m->inrule; + m->inrule += "::"; + m->inrule += name; + bool b = p->match(m); + m->inrule = save_name; + int e = m->pos; + if(b) { + smart_ptr<Group> g = new Group(name,m->input,s,e,m->children); + if(capture) + chSave.push_back(g); + } + m->children = chSave; + return b; +} |