Skip to content
Snippets Groups Projects
Commit 2b48b679 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

raw parse ranked tree types

parent 6df8be2e
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -8,6 +8,7 @@
#include <sax/FromXMLParserHelper.h>
#include <exception/CommonException.h>
#include <tree/Tree.h>
#include <tree/RankedTreeWrapper.h>
#include <tree/TreeClasses.h>
#include <alphabet/Symbol.h>
#include <alphabet/BarSymbol.h>
......@@ -33,6 +34,22 @@ Tree TreeFromRawParser::parseTree(std::deque<sax::Token>::iterator& input, const
throw exception::CommonException("Invalid input");
}
 
RankedTreeWrapper TreeFromRawParser::parseRankedTree(std::deque<sax::Token>::iterator& input) const {
return parseRankedTree(input, std::set<FEATURES>({FEATURES::RANKED_TREE, FEATURES::PREFIX_RANKED_TREE, FEATURES::PREFIX_RANKED_BAR_TREE}));
}
RankedTreeWrapper TreeFromRawParser::parseRankedTree(std::deque<sax::Token>::iterator& input, const std::set<FEATURES>& features) const {
UnrankedTree < alphabet::Symbol > tree(this->parseContent(input));
if(features.count(FEATURES::PREFIX_RANKED_TREE)) return RankedTreeWrapper{PrefixRankedTree < alphabet::Symbol, primitive::Unsigned > {RankedTree < alphabet::Symbol, primitive::Unsigned > {tree}}};
if(features.count(FEATURES::PREFIX_RANKED_BAR_TREE)) return RankedTreeWrapper{PrefixRankedBarTree < alphabet::Symbol, primitive::Unsigned > {alphabet::Symbol{alphabet::BarSymbol{}}, RankedTree < alphabet::Symbol, primitive::Unsigned > {tree}}};
if(features.count(FEATURES::RANKED_TREE)) return RankedTreeWrapper{RankedTree < alphabet::Symbol, primitive::Unsigned > {tree}};
throw exception::CommonException("Invalid input");
}
std::tree < alphabet::Symbol > TreeFromRawParser::parseContent(std::deque<sax::Token>::iterator& input) const {
if (sax::FromXMLParserHelper::isTokenType(input, sax::Token::TokenType::START_ELEMENT)) {
std::tree < alphabet::Symbol > node ( alphabet::Symbol(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::START_ELEMENT)), {});
......
......@@ -24,6 +24,9 @@ public:
Tree parseTree(std::deque<sax::Token>::iterator& input) const;
Tree parseTree(std::deque<sax::Token>::iterator& input, const std::set<FEATURES>& features) const;
 
RankedTreeWrapper parseRankedTree(std::deque<sax::Token>::iterator& input) const;
RankedTreeWrapper parseRankedTree(std::deque<sax::Token>::iterator& input, const std::set<FEATURES>& features) const;
private:
std::tree < alphabet::Symbol > parseContent(std::deque<sax::Token>::iterator& input) const;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment