From 0e86233a0af3a0664b7311e07e1380afc5308243 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 17 Aug 2014 01:13:01 -0400 Subject: [PATCH] Parser - Converted ::findPattern to use recursive scan. --- src/Parser.cpp | 51 +++++++++++++++++++++----------------------------- src/Parser.h | 2 +- 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/src/Parser.cpp b/src/Parser.cpp index a132c70df..218da720f 100644 --- a/src/Parser.cpp +++ b/src/Parser.cpp @@ -179,7 +179,7 @@ Tree* Parser::parse () applyOverrides (); findSubstitution (); - findPattern (); + scan (&Parser::findPattern); findTag (); scan (&Parser::findAttribute); scan (&Parser::findAttributeModifier); @@ -786,40 +786,31 @@ std::string Parser::getCommand () const //////////////////////////////////////////////////////////////////////////////// // /pattern/ --> description ~ pattern -void Parser::findPattern () +void Parser::findPattern (Tree* t) { - std::vector ::iterator i; - for (i = _tree->_branches.begin (); i != _tree->_branches.end (); ++i) + context.debug ("findPattern"); + context.debug (t->dump ()); + + Nibbler n (t->attribute ("raw")); + std::string pattern; + if (n.getQuoted ('/', pattern) && + n.depleted () && + pattern.length () > 0) { - // Parser override operator. - if ((*i)->attribute ("raw") == "--") - break; + t->unTag ("?"); + t->removeAllBranches (); + t->tag ("PATTERN"); - // Skip known args. - if (! (*i)->hasTag ("?")) - continue; + Tree* branch = t->addBranch (new Tree ("argPat")); + branch->attribute ("raw", "description"); - Nibbler n ((*i)->attribute ("raw")); - std::string pattern; - if (n.getQuoted ('/', pattern) && - n.depleted () && - pattern.length () > 0) - { - (*i)->unTag ("?"); - (*i)->removeAllBranches (); - (*i)->tag ("PATTERN"); + branch = t->addBranch (new Tree ("argPat")); + branch->attribute ("raw", "~"); + branch->tag ("OP"); - Tree* branch = (*i)->addBranch (new Tree ("argPat")); - branch->attribute ("raw", "description"); - - branch = (*i)->addBranch (new Tree ("argPat")); - branch->attribute ("raw", "~"); - branch->tag ("OP"); - - branch = (*i)->addBranch (new Tree ("argPat")); - branch->attribute ("raw", pattern); - branch->tag ("STRING"); - } + branch = t->addBranch (new Tree ("argPat")); + branch->attribute ("raw", pattern); + branch->tag ("STRING"); } } diff --git a/src/Parser.h b/src/Parser.h index 9152da70d..115d44485 100644 --- a/src/Parser.h +++ b/src/Parser.h @@ -70,7 +70,7 @@ public: private: void scan (void (Parser::*callback)(Tree*), Tree* tree = NULL); void findTerminator (Tree*); - void findPattern (); + void findPattern (Tree*); void findSubstitution (); void findTag (); void findAttribute (Tree*);