From 39038fddb2032c9944e549be8f1665e028cb68b8 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Sat, 5 Jan 2013 23:06:51 +0100 Subject: Deprecated parser class in favour of plain functions; Internal lexer, priority determination and tree building functions were hidden in unnamed namespace --- src/parser.cc | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'src/parser.cc') diff --git a/src/parser.cc b/src/parser.cc index 0f05790..5989027 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -5,8 +5,16 @@ namespace SimpleParser { -int8_t Parser::getPriority(char tmp) -{ +double calculate(std::string term) { + Tree termTree; + termTree.setRoot(buildTree(&termTree, term)); + + return termTree.solve(); +} + +namespace { + +int8_t getPriority(char tmp) { switch ( tmp ) { case '-': return 10; @@ -29,8 +37,7 @@ int8_t Parser::getPriority(char tmp) } } -std::vector Parser::lexer(std::string term) -{ +std::vector lexer(std::string term) { std::string tmp; std::string tmpNum; std::string::iterator termIter; @@ -41,7 +48,7 @@ std::vector Parser::lexer(std::string term) uint32_t level = 0; for ( termIter = term.begin(); termIter != term.end(); termIter++ ) { - priority = this->getPriority(*termIter); + priority = getPriority(*termIter); if ( priority == -1 || ( termIter == term.begin() && priority == 10 ) ) { if ( level > 0 ) { @@ -111,24 +118,24 @@ std::vector Parser::lexer(std::string term) return output; } -Node* Parser::buildTree(Tree *tree, std::string term) { +Node* buildTree(Tree *tree, std::string term) { std::stack operandStack; std::stack operatorStack; std::vector tmpLexer; - std::vector lexerOutput = this->lexer(term); + std::vector lexerOutput = lexer(term); int8_t priority; for ( auto termIter = lexerOutput.begin(); termIter != lexerOutput.end(); termIter++ ) { std::string& currTerm = (*termIter); - priority = this->getPriority(currTerm[0]); + priority = getPriority(currTerm[0]); if ( priority != -1 && (*termIter).size() == 1 ) { if ( !operatorStack.empty() ) { OperatorNode *lastNode = static_cast(operatorStack.top()); - if ( this->getPriority(lastNode->getFunction()) < priority ) { + if ( getPriority(lastNode->getFunction()) < priority ) { operatorStack.push( tree->addOperator(nullptr, currTerm[0]) ); @@ -150,7 +157,7 @@ Node* Parser::buildTree(Tree *tree, std::string term) { operatorStack.push(tree->addOperator(nullptr, currTerm[0])); } } else { - tmpLexer = this->lexer(*termIter); + tmpLexer = lexer(*termIter); if ( tmpLexer.size() == 1 ) { double value; @@ -181,11 +188,6 @@ Node* Parser::buildTree(Tree *tree, std::string term) { return operandStack.top(); } -double Parser::calculate(std::string term) { - Tree termTree; - termTree.setRoot(this->buildTree(&termTree, term)); - - return termTree.solve(); } -} +} // SimpleParser -- cgit v1.2.3