From e947c3a1b6bc0eb1cc763a5e39b7dfb8165a55c1 Mon Sep 17 00:00:00 2001
From: Matthias Schoepfer <mschoepf@techfak.uni-bielefeld.de>
Date: Fri, 14 Jun 2013 20:02:58 +0200
Subject: [PATCH] before i am going to trysomething crazy

---
 .../parserMinimalExample2.cpp                 |  12 +-
 .../nbproject/private/configurations.xml      |   2 -
 pocketsphinxAdapter/src/JsgfParser.cpp        |   2 +-
 pocketsphinxAdapter/src/JsgfParser.h          | 174 ++++++++----------
 pocketsphinxAdapter/src/basic.jsgf            |   2 +-
 pocketsphinxAdapter/src/dynamicParser.h       |  15 +-
 6 files changed, 97 insertions(+), 110 deletions(-)

diff --git a/parserMinimalExample/parserMinimalExample2.cpp b/parserMinimalExample/parserMinimalExample2.cpp
index 7f6de235..8d774b60 100644
--- a/parserMinimalExample/parserMinimalExample2.cpp
+++ b/parserMinimalExample/parserMinimalExample2.cpp
@@ -17,6 +17,7 @@ struct dynamicParser
       : dynamicParser::base_type(startRule)
     {
         startRule = rules[0];
+	qi::debug (startRule);
     }
  
     RuleType startRule;
@@ -29,8 +30,11 @@ main (int argc, char** argv) {
  
   myRuleVector.push_back (RuleType(qi::eps));//This rule is going to get replaced
   myRuleVector.push_back (RuleType(qi::string("Hello")));
-  myRuleVector.push_back (RuleType(qi::string("Hi")));
-  myRuleVector.push_back (RuleType(qi::string("Whats up")));
+  myRuleVector.back().name("Hello");
+  myRuleVector.push_back (RuleType(-(qi::string("Hi"))));
+  myRuleVector.back().name("Hi");
+  myRuleVector.push_back (RuleType(-qi::string("Whats up")));
+  myRuleVector.back().name("Whats up");
  
   //Now magically compose a rule *with arbitrary vectorsize*
   //I have no clue how to do this
@@ -39,11 +43,11 @@ main (int argc, char** argv) {
   myRuleVector[0] = myRuleVector[1] | myRuleVector[2] | myRuleVector[3];
   myRuleVector.at(0) = myRuleVector.at(1);
   for (int i=2; i < 3; i++)
-    myRuleVector.at(0) = myRuleVector.at(0).copy() | myRuleVector.at(i);
+    myRuleVector.at(0) = myRuleVector.at(0).copy() > myRuleVector.at(i);
  
   dynamicParser<std::string::const_iterator> myDynamicParser(myRuleVector);
  
-  std::string const s ("Hi");
+  std::string const s ("Hello Hi");
   std::string attr;
  
   if (qi::phrase_parse (s.begin(), s.end(),myDynamicParser,ascii::space,attr))
diff --git a/pocketsphinxAdapter/nbproject/private/configurations.xml b/pocketsphinxAdapter/nbproject/private/configurations.xml
index 1f10486a..7f1400cd 100644
--- a/pocketsphinxAdapter/nbproject/private/configurations.xml
+++ b/pocketsphinxAdapter/nbproject/private/configurations.xml
@@ -53,8 +53,6 @@
         </df>
         <df name="CMakeTmp">
         </df>
-        <df name="Progress">
-        </df>
       </df>
       <df name="src">
         <df name="CMakeFiles">
diff --git a/pocketsphinxAdapter/src/JsgfParser.cpp b/pocketsphinxAdapter/src/JsgfParser.cpp
index bc6f0854..28f657c4 100644
--- a/pocketsphinxAdapter/src/JsgfParser.cpp
+++ b/pocketsphinxAdapter/src/JsgfParser.cpp
@@ -97,7 +97,7 @@ main(int argc, char** argv) {
         std::cout << "JSGF rule generation FAILED" << std::endl;
         return 1;
     }
-    std::vector<jsgfParserTypes::ruleTPtr> myRules = myJsgfParser.getRules();
+    std::vector<jsgfParserTypes::ruleT> myRules = myJsgfParser.getRules();
     dynamicParser<std::string::iterator> myDynamicParser (myRules);
     std::string st ("this is a task");
     while (0 != st.compare(""))
diff --git a/pocketsphinxAdapter/src/JsgfParser.h b/pocketsphinxAdapter/src/JsgfParser.h
index ea5f8ef9..c2e872f2 100644
--- a/pocketsphinxAdapter/src/JsgfParser.h
+++ b/pocketsphinxAdapter/src/JsgfParser.h
@@ -67,9 +67,8 @@ namespace jsgfParserTypes {
         std::vector<RuleT> rules;
     };
     typedef qi::rule<std::string::iterator,std::string(), ascii::space_type> ruleT;
-    typedef ruleT* ruleTPtr;
     typedef std::map<std::string, jsgfParserTypes::TermT > ruleNameToTermT;
-    typedef std::map<std::string,std::vector<ruleTPtr>::size_type> nameToRuleT;
+    typedef std::map<std::string,std::vector<ruleT>::size_type> nameToRuleT;
     
 }
 BOOST_FUSION_ADAPT_STRUCT(
@@ -103,14 +102,6 @@ BOOST_FUSION_ADAPT_STRUCT(
 
 namespace jsgfParserTypes {
     
-    /*void addLastNRules (std::vector<ruleTPtr> &rules, std::vector<ruleTPtr>::size_type diff)
-    {
-        std::vector<ruleTPtr>::size_type size = rules.size();
-        switch (diff)
-        {
-            case 1: if (rules.at(size-1).)
-        }
-    }*/
     
     void fun() {
         std::cout << "fun called" << std::endl;
@@ -268,16 +259,16 @@ namespace jsgfParserTypes {
     
     class TermTRuleGenerator {
     public:
-        TermTRuleGenerator (std::vector<ruleTPtr > &rules, nameToRuleT &namesToRules, std::string nonterminal) : myRules(rules), myNamesToRules(namesToRules), myNonterminal(nonterminal){}
+        TermTRuleGenerator (std::vector<ruleT> &rules, nameToRuleT &namesToRules, std::string nonterminal) : myRules(rules), myNamesToRules(namesToRules), myNonterminal(nonterminal){}
         void operator()(TermT & t) const;
-        std::vector<ruleTPtr> &myRules;
+        std::vector<ruleT> &myRules;
         nameToRuleT &myNamesToRules;
         std::string myNonterminal;
     };
     
     class TermWrapperRuleGenerator : public boost::static_visitor<> {
     public:
-        TermWrapperRuleGenerator (std::vector<ruleTPtr> &rules, nameToRuleT & namesToRules, std::string nonterminal) : myRules (rules), myNamesToRules(namesToRules), myNonterminal(nonterminal){}
+        TermWrapperRuleGenerator (std::vector<ruleT> &rules, nameToRuleT & namesToRules, std::string nonterminal) : myRules (rules), myNamesToRules(namesToRules), myNonterminal(nonterminal){}
         void operator ()(TermT & t) const
         {                                   
             TermTRuleGenerator myGenerator (myRules,myNamesToRules, myNonterminal);
@@ -288,23 +279,24 @@ namespace jsgfParserTypes {
         {
             if (0 == tl.symbols.size())
                 return; //Save a lot of time and some if cases below
+            std::vector<SymbolT>::size_type myRulesLocalStart = myRules.size();
             for (std::vector<jsgfParserTypes::SymbolT>::size_type i=0; i < tl.symbols.size(); i++)
             {
                 if (0 == tl.symbols.at(i).type)
                 {
-                        myRules.push_back (new ruleT (qi::string(trim(tl.symbols.at(i).name))[qi::_val = px::val(myNonterminal)]));
-                        (*myRules.back()).name(std::string("T:").append(trim(tl.symbols.at(i).name)));
-                        //std::cout << "Added qi::lexeme[" << trim(tl.symbols.at(i).name) << "][" << myNonterminal << "]"<< std::endl;
+                        myRules.push_back(qi::string(trim(tl.symbols.at(i).name))[qi::_val = px::val(myNonterminal)]);
+                        myRules.back().name(std::string("T:").append(trim(tl.symbols.at(i).name)));
+                        std::cout << "Added qi::lexeme[" << trim(tl.symbols.at(i).name) << "][" << myNonterminal << "] with name "<< myRules.back().name() << std::endl;
                 }
                 else
                 {
                     nameToRuleT::iterator pos = myNamesToRules.find(trim(tl.symbols.at(i).name));
                     if (pos != myNamesToRules.end())
                     {
-                        //std::cout << "Adding nonterminal '" << trim(tl.symbols.at(i).name) <<"' link to rule " << pos->second << std::endl;
-                        myRules.push_back (new ruleT ((*myRules.at(pos->second))[qi::_val = px::val(myNonterminal) + px::val('+') +  qi::_1]));
-                        (*myRules.back()).name(std::string("N:").append(trim(tl.symbols.at(i).name)));
-                        //std::cout << "done" << std::endl;
+                        std::cout << "Adding nonterminal '" << trim(tl.symbols.at(i).name) <<"' link to rule " << pos->second << std::endl;
+                        myRules.push_back(myRules.at(pos->second)[qi::_val = px::val(myNonterminal) + px::val('+') +  qi::_1]);
+                        myRules.back().name(std::string("N:").append(trim(tl.symbols.at(i).name)));
+                        std::cout << "done" << std::endl;
                     }
                     else
                     {
@@ -313,114 +305,106 @@ namespace jsgfParserTypes {
                     }
                 }
             }
-            ruleTPtr r = new ruleT ((*myRules.front())[px::insert(qi::_val,px::end(qi::_val), px::begin(qi::_1), px::end(qi::_1))]);
-            r->name("(" + myRules.front()->name());
-            for (std::vector<SymbolT>::size_type i=1; i < tl.symbols.size();i++)
+            
+            ruleT r = (myRules.at(myRulesLocalStart)[qi::_val = qi::_1]/*[px::insert(qi::_val,px::end(qi::_val), px::begin(qi::_1), px::end(qi::_1))]*/);
+            r.name(myRules.at(myRulesLocalStart).name());
+            for (std::vector<SymbolT>::size_type i=(myRulesLocalStart+1); i < myRules.size();i++)
             {
-                (*r) = r->copy() > ((*myRules.at(i))[px::insert(qi::_val,px::end(qi::_val), px::begin(qi::_1), px::end(qi::_1))]);
-                r->name(r->name() + " > " + myRules.at(i)->name());
-            }
-            r->name(r->name() + ")");
+                r = r.copy() > (myRules.at(i)/*[px::insert(qi::_val,px::end(qi::_val), px::begin(qi::_1), px::end(qi::_1))]*/);
+                r.name(r.name() + " > " + myRules.at(i).name());
+            }            
             myRules.push_back(r);            
-            std::cout << "TermLeaf created rule " << myRules.back()->name() << std::endl;
+            std::cout << "TermLeaf created rule " << myRules.back().name() << std::endl;
         }
-        std::vector<ruleTPtr> &myRules;
+        std::vector<ruleT> &myRules;
         nameToRuleT &myNamesToRules; 
         std::string myNonterminal;
     };
     void TermTRuleGenerator::operator()(TermT & t) const
     {
-        std::vector<std::vector<ruleTPtr>::size_type> indices;
+        std::vector<std::vector<ruleT>::size_type> indices;
         BOOST_FOREACH(TermWrapperT & node, t.children)
         {            
-            std::vector<ruleTPtr>::size_type rulesSize = myRules.size();
+            std::vector<ruleT>::size_type rulesSize = myRules.size();
             boost::apply_visitor(TermWrapperRuleGenerator(myRules,myNamesToRules,myNonterminal),node);
             if (rulesSize != myRules.size())
             {
                 indices.push_back(myRules.size()-1);
             }
-        }
-        ruleTPtr r=NULL;
+        }        
         if (indices.size() > 0)
         {
-            
+            ruleT r;
             if (t.optional)
             {
-                r = new ruleT (-(*myRules.at(indices.at(0))));
-                r->name("[" + (*myRules.at(indices.at(0))).name());
+                r = (-(myRules.at(indices.at(0)))[qi::_val = qi::_1]);
+                r.name("[" + myRules.at(indices.at(0)).name());
             }
             else {
-                r = new ruleT ((*myRules.at(indices.at(0))));
-                r->name("(" + (*myRules.at(indices.at(0))).name());
+                r = (myRules.at(indices.at(0)));
+                r.name("(" + myRules.at(indices.at(0)).name());
             }
                 
             
-            for (std::vector<ruleTPtr>::size_type i=1; i < indices.size(); i++)
+            for (std::vector<ruleT>::size_type i=1; i < indices.size(); i++)
             {
                 if (t.optional)
                 {
-                    (*r) = (*r).copy() > (-(*myRules.at(indices.at(i))));
-                    r->name(r->name() + " > " + (*myRules.at(indices.at(i))).name());                  
+                    r = r.copy() > (-(myRules.at(indices.at(i))));
+                    r.name(r.name() + " > " + myRules.at(indices.at(i)).name());                  
                 }
                 else
                 {
-                    (*r) = (*r).copy() > (*myRules.at(indices.at(i)));
-                    r->name(r->name() + " > " + (*myRules.at(indices.at(i))).name());
+                    r = r.copy() > myRules.at(indices.at(i));
+                    r.name(r.name() + " > " + myRules.at(indices.at(i)).name());
                 }
             }
             if (t.optional)
-                r->name(r->name() + "]");
+                r.name(r.name() + "]");
             else
-                r->name(r->name() + ")");
-        }
-        if (NULL != r)
-        {
-                myRules.push_back(r);
-                std::cout << "Composed rule " << r->name() << " with t.option: " << t.optional << std::endl;
+                r.name(r.name() + ")");
+            myRules.push_back(r);
+            std::cout << "Composed rule " << r.name() << std::endl;
         }
         indices.clear();
         BOOST_FOREACH(TermWrapperT &node, t.orTerms)
         {
-            std::vector<ruleTPtr>::size_type rulesSize = myRules.size();
+            std::vector<ruleT>::size_type rulesSize = myRules.size();
             boost::apply_visitor(TermWrapperRuleGenerator(myRules,myNamesToRules,myNonterminal),node);
             if (rulesSize != myRules.size()) {
 
                 indices.push_back(myRules.size() - 1);           
             }
         }
-        r=NULL;
         if (indices.size() > 0)
-        {
-            r = new ruleT ((*myRules.at(indices.at(0))));
+        {            
+            ruleT r;
             if (t.optional)
             {
-                r = new ruleT (-(*myRules.at(indices.at(0))));
-                r->name("[" + (*myRules.at(indices.at(0))).name());
+                r = (-(myRules.at(indices.at(0))));
+                r.name("[" + myRules.at(indices.at(0)).name());
             }
             else {
-                r = new ruleT ((*myRules.at(indices.at(0))));
-                r->name("(" + (*myRules.at(indices.at(0))).name());
+                r = myRules.at(indices.at(0));
+                r.name("(" + myRules.at(indices.at(0)).name());
             }                        
-            for (std::vector<ruleTPtr>::size_type i=1; i < indices.size(); i++)
+            for (std::vector<ruleT>::size_type i=1; i < indices.size(); i++)
             {
                 if (t.optional)
                 {
-                    (*r) = (*r).copy() | (-(*myRules.at(indices.at(i))));
-                    r->name(r->name() + " | " + (*myRules.at(indices.at(i))).name());
+                    r = r.copy() | (-(myRules.at(indices.at(i))));
+                    r.name(r.name() + " | " + (myRules.at(indices.at(i))).name());
                 } else {
-                    (*r) = (*r).copy() | (*myRules.at(indices.at(i)));
-                    r->name(r->name() + " | " + (*myRules.at(indices.at(i))).name());
+                    r = r.copy() | (myRules.at(indices.at(i)));
+                    r.name(r.name() + " | " + myRules.at(indices.at(i)).name());
                 }                
             }
             if (t.optional)
-                r->name(r->name() + "]");
+                r.name(r.name() + "]");
             else
-                r->name(r->name() + ")");
-        }
-        if (NULL != r)
-        {
-                myRules.push_back(r);
-                std::cout << "Composed rule " << r->name() << " with t.option: " << t.optional << std::endl;
+                r.name(r.name() + ")");
+            myRules.push_back(r);
+            std::cout << "Composed rule " << r.name() << std::endl;
         }
     }
 }
@@ -440,7 +424,8 @@ public:
         symbolParser = (terminal | nonterminal);
         symbolList = +(symbolParser)[px::push_back(px::at_c<0>(qi::_val),qi::_1)];// > qi::eps[px::at_c<0>(qi::_val) = px::val(false)];
         symbolListWrapper = symbolList [qi::_val = qi::_1];
-        termList = (symbolList[px::push_back(px::at_c<1>(qi::_val),qi::_1)] | parenteseTerm[px::push_back(px::at_c<1>(qi::_val),qi::_1)] | optionalTerm[px::push_back(px::at_c<1>(qi::_val), qi::_1)] | orTerm[px::push_back(px::at_c<2>(qi::_val),qi::_1)]) >> (termList[px::insert(px::at_c<1>(qi::_val),px::end(px::at_c<1>(qi::_val)), px::begin(px::at_c<1>(qi::_1)), px::end(px::at_c<1>(qi::_1)))]/*[px::push_back(px::at_c<1>(qi::_val),(qi::_1)),px::at_c<2>(qi::_val) = px::at_c<2>(qi::_1)]*/  || qi::eps);
+        termParser = (symbolList[px::push_back(px::at_c<1>(qi::_val),qi::_1)] | parenteseTerm[px::push_back(px::at_c<1>(qi::_val),qi::_1)] | optionalTerm[px::push_back(px::at_c<1>(qi::_val), qi::_1)] | orTerm[px::push_back(px::at_c<2>(qi::_val),qi::_1)]);
+        termList = (termParser[px::insert(px::at_c<1>(qi::_val),px::end(px::at_c<1>(qi::_val)), px::begin(px::at_c<1>(qi::_1)), px::end(px::at_c<1>(qi::_1))),px::insert(px::at_c<2>(qi::_val),px::end(px::at_c<2>(qi::_val)), px::begin(px::at_c<2>(qi::_1)), px::end(px::at_c<2>(qi::_1)))] >> -(termList[px::insert(px::at_c<1>(qi::_val),px::end(px::at_c<1>(qi::_val)), px::begin(px::at_c<1>(qi::_1)), px::end(px::at_c<1>(qi::_1))),px::insert(px::at_c<2>(qi::_val),px::end(px::at_c<2>(qi::_val)), px::begin(px::at_c<2>(qi::_1)), px::end(px::at_c<2>(qi::_1)))]/*[px::push_back(px::at_c<1>(qi::_val),(qi::_1)),px::at_c<2>(qi::_val) = px::at_c<2>(qi::_1)]*/));
         parenteseTerm = qi::lit('(') > (termList)[qi::_val = qi::_1] > qi::eps[px::at_c<0>(qi::_val) = px::val(false)] > qi::lit(')');
         optionalTerm = qi::lit('[') > (termList[qi::_val = qi::_1]) > qi::eps[px::at_c<0>(qi::_val) = px::val(true)] > qi::lit(']');
         orTerm = qi::lit('|') > termList[qi::_val = qi::_1];// > *(termList[px::push_back(px::at_c<1>(qi::_val),qi::_1)]));
@@ -451,7 +436,7 @@ public:
         optionalTerm %= (qi::lit('[') > *termParser % qi::lit('|')  > qi::lit(']'));
         termList = symbolListWrapper [px::push_back(px::at_c<0>(qi::_val),qi::_1)] | parenteseTerm[qi::_val = qi::_1] | optionalTerm[qi::_val = qi::_1]; //jsgf
         termListList = *termList[px::push_back(px::at_c<0>(qi::_val),qi::_1)];*/
-        ruleParser %= (qi::eps || "public") >> qi::lit('<') > identifier/*[px::at_c<0>(qi::_val) = qi::_1]*/ > qi::lit('>') > qi::lit('=') > termList /*[px::at_c<1>(qi::_val),qi::_1]*/ > qi::lit(';');
+        ruleParser %= (qi::eps || "public") >> qi::lit('<') > identifier/*[px::at_c<0>(qi::_val) = qi::_1]*/ > qi::lit('>') > qi::lit('=') > termList/*[px::at_c<1>(qi::_val) = qi::_1]*/ > qi::lit(';');
         jsgfParser = jsgfIdentifier >> grammarIdentifier[px::at_c<0>(qi::_val),qi::_1] >> *ruleParser[px::push_back(px::at_c<1>(qi::_val),qi::_1)];
         
         
@@ -464,14 +449,17 @@ public:
         symbolListOptional.name("List of Optional Symbols");
         termParser.name("TermParser");
         termList.name("TermList");
+        optionalTerm.name("OptionalTerm");
+        orTerm.name ("orTerm");
+        parenteseTerm.name("ParenteseTerm");
         ruleParser.name("RuleParser");
-        qi::debug(ruleParser);
-        qi::debug(termList);
+        qi::debug(ruleParser);      
         qi::debug(symbolList);
-        qi::debug(symbolListWrapper);
-        qi::debug(symbolParser);
-        qi::debug(terminal);
-        qi::debug(identifier);
+        qi::debug(termParser);
+        qi::debug(termList);
+        qi::debug(parenteseTerm);
+        qi::debug(orTerm);
+        qi::debug(optionalTerm);
         qi::on_error<qi::fail>
         (
              jsgfParser
@@ -496,13 +484,13 @@ public:
     qi::rule<Iterator, jsgfParserTypes::TermT(), ascii::space_type> optionalTerm;
     qi::rule<Iterator, jsgfParserTypes::TermT(), ascii::space_type> orTerm;
     qi::rule<Iterator, jsgfParserTypes::TermLeafT(), ascii::space_type> symbolListOptional;
-    qi::rule<Iterator, jsgfParserTypes::TermWrapperT(), ascii::space_type> termParser;
+    qi::rule<Iterator, jsgfParserTypes::TermT(), ascii::space_type> termParser;
     qi::rule<Iterator, jsgfParserTypes::TermT(), ascii::space_type> termList;
     qi::rule<Iterator, jsgfParserTypes::TermT(), ascii::space_type> termListList;
     qi::rule<Iterator, jsgfParserTypes::RuleT(), ascii::space_type> ruleParser;
     qi::rule<Iterator, jsgfParserTypes::GrammarT(),ascii::space_type> jsgfParser;
     jsgfParserTypes::ruleNameToTermT rulesMap;
-    std::vector<jsgfParserTypes::ruleTPtr > myRuleVector;
+    std::vector<jsgfParserTypes::ruleT> myRuleVector;
 
     bool sanitizeCheckGrammar(jsgfParserTypes::GrammarT &grammar, bool verbose = false) {
         jsgfParserTypes::TermTPrinter myTermPrinter;
@@ -546,32 +534,30 @@ public:
     jsgfParserTypes::nameToRuleT myNameToRule;
     
     myRuleVector.clear();
-    std::vector<jsgfParserTypes::ruleTPtr>::size_type increment=0;
-    for (std::vector<jsgfParserTypes::ruleTPtr>::size_type i=0; i < grammar.rules.size();i++) // Make an empty rule for every rule/nonterminal we read
-    {
-        //myRuleVector.push_back (boost::make_shared<jsgfParserTypes::ruleT>());
-        myRuleVector.push_back (new jsgfParserTypes::ruleT (qi::eps));
-        (*myRuleVector.back()).name(grammar.rules.at(i).name);
+    std::vector<jsgfParserTypes::ruleT>::size_type increment=0;
+    for (std::vector<jsgfParserTypes::ruleT>::size_type i=0; i < grammar.rules.size();i++) // Make an empty rule for every rule/nonterminal we read
+    {        
+        myRuleVector.push_back ((qi::int_));
+        myRuleVector.back().name(grammar.rules.at(i).name);
         myNameToRule.insert(std::make_pair(grammar.rules.at(i).name,increment));
         increment++;
     }
     increment=grammar.rules.size()-1;
-    for (std::vector<jsgfParserTypes::ruleTPtr>::size_type i=grammar.rules.size(); i > 0;i--)
+    for (std::vector<jsgfParserTypes::ruleT>::size_type i=grammar.rules.size(); i > 0;i--)
     {
-        std::vector<jsgfParserTypes::ruleTPtr> tempRuleVector = myRuleVector;        
+        std::vector<jsgfParserTypes::ruleT> tempRuleVector = myRuleVector;        
         jsgfParserTypes::TermTRuleGenerator myRuleGenerator(myRuleVector, myNameToRule, grammar.rules.at(i-1).name);
-        std::cout << "***Making Rule " << myRuleVector.at(increment)->name() << std::endl;
+        std::cout << "***Making Rule " << myRuleVector.at(increment).name() << std::endl;
         myRuleGenerator(grammar.rules.at(i-1).RHS);
-        std::string ruleResult;
-        (*myRuleVector.at(increment)) = (*myRuleVector.back()) > qi::eps;
-        ruleResult = (*myRuleVector.back()).name();
-        std::cout << "*** Rule " << myRuleVector.at(increment)->name() << " = " << ruleResult << std::endl;
+        myRuleVector.at(increment) = (myRuleVector.back());        
+        myRuleVector.at(increment).name(grammar.rules.at(i-1).name);
+        std::cout << "*** Rule " << myRuleVector.at(increment).name() << " = " << myRuleVector.back().name() << std::endl;
         //std::vector<jsgfParserTypes::ruleTPtr>::size_type sizeDiff = myRuleVector.size() - tempRuleVector.size();        
         increment--;
     }
     return true;
     }
-    std::vector<jsgfParserTypes::ruleTPtr> getRules() {
+    std::vector<jsgfParserTypes::ruleT> getRules() {
         return myRuleVector;
     }
     //virtual ~parserToyExample();
diff --git a/pocketsphinxAdapter/src/basic.jsgf b/pocketsphinxAdapter/src/basic.jsgf
index 5c0e7e80..570f1757 100644
--- a/pocketsphinxAdapter/src/basic.jsgf
+++ b/pocketsphinxAdapter/src/basic.jsgf
@@ -1,3 +1,3 @@
 #JSGF V1.0;
 grammar ToBI_GPR;
-public <task> = random (shit) [option];
\ No newline at end of file
+public <task> = my [option];
diff --git a/pocketsphinxAdapter/src/dynamicParser.h b/pocketsphinxAdapter/src/dynamicParser.h
index 50b9f834..07ba12d3 100644
--- a/pocketsphinxAdapter/src/dynamicParser.h
+++ b/pocketsphinxAdapter/src/dynamicParser.h
@@ -23,17 +23,17 @@ namespace ascii = boost::spirit::ascii;
 
 template <typename Iterator>
 struct dynamicParser : qi::grammar<Iterator,std::string(), boost::spirit::ascii::space_type> {
-    dynamicParser (std::vector<qi::rule<Iterator,std::string(), qi::ascii::space_type>* > rules) : dynamicParser::base_type(startRule) {
+    dynamicParser (std::vector<qi::rule<Iterator,std::string(), qi::ascii::space_type> > rules) : dynamicParser::base_type(startRule) {
         rulestack = rules;
-        startRule = *(rulestack.at(0));
+        startRule = rulestack.at(0);
         std::cout << "Startrule name: " << startRule.name() << std::endl;
         
-        for (unsigned long int i; i < rulestack.size();i++)
-            qi::debug(*rulestack.at(i));
+        for (unsigned long int i=0; i < rulestack.size();i++)
+            qi::debug(rulestack.at(i));  
         qi::debug(startRule);
         qi::on_error<qi::fail>
         (
-            startRule
+                startRule
             , std::cout
                 << px::val("Error! Expecting ")
                 << qi::_4                               // what failed?
@@ -43,9 +43,8 @@ struct dynamicParser : qi::grammar<Iterator,std::string(), boost::spirit::ascii:
                 << std::endl
         );
     }
-    std::vector<qi::rule<Iterator,std::string(),qi::ascii::space_type>* > rulestack;
-    qi::rule<Iterator,std::string(), qi::ascii::space_type> startRule;
-    
+    std::vector<qi::rule<Iterator,std::string(),qi::ascii::space_type> > rulestack;
+    qi::rule<Iterator,std::string(),qi::ascii::space_type> startRule;
 };
 
 
-- 
GitLab