diff --git a/include/aidge/graphRegex/GraphParser.hpp b/include/aidge/graphRegex/GraphParser.hpp index cfe25c22709a3516b4f55ba774a616e3b94a055c..2c25ac0b76368242891e6e5ba92c2c5fc913a23c 100644 --- a/include/aidge/graphRegex/GraphParser.hpp +++ b/include/aidge/graphRegex/GraphParser.hpp @@ -12,15 +12,17 @@ namespace Aidge{ /** * @brief this class uses the lexer to create an AST according to a set of gramer rules */ -class GraphParser{ +class GraphParser { - public: +public: /** * @brief AST graph creation function * @param gRegexExpressions String representing the logical fuction to be performed */ GraphParser(const std::string gRegexExpressions); + ~GraphParser() noexcept; + /** * @brief AST graph creation function * @return The AST tree @@ -35,7 +37,7 @@ class GraphParser{ const std::string getQuery(); - private: +private: /** * @brief restart at the start of the ConditionalExpressions for LEXER and restart mCurrentToken */ diff --git a/include/aidge/nodeTester/ConditionalParser.hpp b/include/aidge/nodeTester/ConditionalParser.hpp index c21eca0407b77808287138fd39e33c00d241fb70..1f3671ea5b68008a67be5d6a63d09051d49939d5 100644 --- a/include/aidge/nodeTester/ConditionalParser.hpp +++ b/include/aidge/nodeTester/ConditionalParser.hpp @@ -29,7 +29,7 @@ using ASTNodeCh = std::vector<std::shared_ptr<AstNode<ConditionalTokenTypes>>>; /** * @brief this class uses the lexer to create an AST according to a set of gramer rules */ -class ConditionalParser{ +class ConditionalParser { public: /** @@ -38,6 +38,8 @@ class ConditionalParser{ */ ConditionalParser(const std::string ConditionalExpressions); + ~ConditionalParser() noexcept; + /** * @brief AST graph creation function * @return The AST tree diff --git a/src/graphRegex/GraphParser.cpp b/src/graphRegex/GraphParser.cpp index 9c3d10114d777cf7755432a5723a3b70b81d37a1..9ad96a34bfbe36bdae65cae072eb4f1edcd3faaf 100644 --- a/src/graphRegex/GraphParser.cpp +++ b/src/graphRegex/GraphParser.cpp @@ -1,19 +1,23 @@ -#include "aidge/graphRegex/GraphParser.hpp" +#include <memory> +#include <string> +#include <vector> -using namespace Aidge; +#include "aidge/graphRegex/GraphParser.hpp" -GraphParser::GraphParser(const std::string gRegexExpressions): +Aidge::GraphParser::GraphParser(const std::string gRegexExpressions): mLexer(gRegexExpressions) { mCurrentToken = mLexer.getNextToken(); } +Aidge::GraphParser::~GraphParser() noexcept = default; -const std::string GraphParser::getQuery(){ + +const std::string Aidge::GraphParser::getQuery(){ return mLexer.getQuery(); } -std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::parse(void){ +std::shared_ptr<Aidge::AstNode<Aidge::gRegexTokenTypes>> Aidge::GraphParser::parse(void){ std::shared_ptr<AstNode<gRegexTokenTypes>> astTree = constructAstAllExpr(); rstParser(); @@ -21,14 +25,14 @@ std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::parse(void){ } -void GraphParser::rstParser(void){ +void Aidge::GraphParser::rstParser(void){ mLexer.rstPosition(); mCurrentToken = mLexer.getNextToken(); } -void GraphParser::ackToken(gRegexTokenTypes tokenType){ - +void Aidge::GraphParser::ackToken(gRegexTokenTypes tokenType){ + if(mCurrentToken->getType() == tokenType ){ try { mCurrentToken = mLexer.getNextToken(); @@ -48,7 +52,7 @@ void GraphParser::ackToken(gRegexTokenTypes tokenType){ /* exp : KEY(QOM | QZM)? | CKEY | domain */ -std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstExp(void) +std::shared_ptr<Aidge::AstNode<Aidge::gRegexTokenTypes>> Aidge::GraphParser::constructAstExp(void) { try{ @@ -86,15 +90,15 @@ std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstExp(void) } /* -seq :exp (NEXT seq)* +seq :exp (NEXT seq)* */ -std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstSeq(void) +std::shared_ptr<Aidge::AstNode<Aidge::gRegexTokenTypes>> Aidge::GraphParser::constructAstSeq(void) { try{ - + std::shared_ptr<AstNode<gRegexTokenTypes>> left = constructAstExp(); - if(mCurrentToken->getType() == gRegexTokenTypes::NEXT ) + if(mCurrentToken->getType() == gRegexTokenTypes::NEXT ) { std::shared_ptr<ParsingToken<gRegexTokenTypes>> token = mCurrentToken->copy(); ackToken(gRegexTokenTypes::NEXT); @@ -114,15 +118,15 @@ std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstSeq(void) /* -LPAREN seq RPAREN (QOM | QZM) +LPAREN seq RPAREN (QOM | QZM) */ -std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstDomain(void) +std::shared_ptr<Aidge::AstNode<Aidge::gRegexTokenTypes>> Aidge::GraphParser::constructAstDomain(void) { try{ std::shared_ptr<ParsingToken<gRegexTokenTypes>> token ; std::shared_ptr<AstNode<gRegexTokenTypes>> node ; - + token = mCurrentToken->copy(); ackToken(gRegexTokenTypes::LPAREN); node = std::make_shared<AstNode<gRegexTokenTypes>>(token, @@ -144,7 +148,7 @@ std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstDomain(void) errorMessage << "Bad syntax constructAstDomain must have quantifier \n"; throw std::runtime_error(errorMessage.str()); } - + return node; } catch (const std::runtime_error& e) { @@ -157,12 +161,12 @@ std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstDomain(void) /* allExpr: seq (SEP allExpr)* | STOP */ -std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstAllExpr(void) +std::shared_ptr<Aidge::AstNode<Aidge::gRegexTokenTypes>> Aidge::GraphParser::constructAstAllExpr(void) { try{ std::shared_ptr<AstNode<gRegexTokenTypes>> left = constructAstSeq(); - if(mCurrentToken->getType() == gRegexTokenTypes::SEP ) + if(mCurrentToken->getType() == gRegexTokenTypes::SEP ) { std::shared_ptr<ParsingToken<gRegexTokenTypes>> token = mCurrentToken->copy(); ackToken(gRegexTokenTypes::SEP); @@ -170,7 +174,7 @@ std::shared_ptr<AstNode<gRegexTokenTypes>> GraphParser::constructAstAllExpr(void if(mCurrentToken->getType() == gRegexTokenTypes::STOP ) { return left; - } + } std::shared_ptr<AstNode<gRegexTokenTypes>> newNode = std::make_shared<AstNode<gRegexTokenTypes>>(token, std::vector<std::shared_ptr<AstNode<gRegexTokenTypes>>>{left,constructAstAllExpr()}); left = newNode; diff --git a/src/nodeTester/ConditionalParser.cpp b/src/nodeTester/ConditionalParser.cpp index 3ca2843aabefe9f98bc8ad46a36fe03883d0baef..ba40c561375e0c09eb86009d447a782ab99d5d0b 100644 --- a/src/nodeTester/ConditionalParser.cpp +++ b/src/nodeTester/ConditionalParser.cpp @@ -1,23 +1,27 @@ +#include <memory> +#include <vector> #include "aidge/nodeTester/ConditionalParser.hpp" -using namespace Aidge; - ////////////////////////////// //ConditionalParser ////////////////////////////// -ConditionalParser::ConditionalParser(const std::string ConditionalExpressions):mLexer(ConditionalExpressions){ +Aidge::ConditionalParser::ConditionalParser(const std::string ConditionalExpressions) + : mLexer(ConditionalExpressions) +{ mCurrentToken = mLexer.getNextToken(); } -void ConditionalParser::rstParser(void){ +Aidge::ConditionalParser::~ConditionalParser() noexcept = default; + +void Aidge::ConditionalParser::rstParser(void){ mLexer.rstPosition(); mCurrentToken = mLexer.getNextToken(); } -void ConditionalParser::ackToken(ConditionalTokenTypes tokenType){ +void Aidge::ConditionalParser::ackToken(ConditionalTokenTypes tokenType){ if(mCurrentToken->getType() == tokenType ){ try { @@ -38,7 +42,7 @@ void ConditionalParser::ackToken(ConditionalTokenTypes tokenType){ -std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstVal(void){ +std::shared_ptr<Aidge::AstNode<Aidge::ConditionalTokenTypes>> Aidge::ConditionalParser::constructAstVal(void){ /* val : (KEY|INTEGER|FOAT|STRING|LAMBDA) */ @@ -76,7 +80,7 @@ std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstV } -std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstLambda(void){ +std::shared_ptr<Aidge::AstNode<Aidge::ConditionalTokenTypes>> Aidge::ConditionalParser::constructAstLambda(void){ /* AstLambda : LAMBDA val (ARGSEP val)* RPAREN */ @@ -94,7 +98,7 @@ std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstL return std::make_shared<AstNode<ConditionalTokenTypes>>(tokenLdb,paramLambda); } -std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstCmpr(void){ +std::shared_ptr<Aidge::AstNode<Aidge::ConditionalTokenTypes>> Aidge::ConditionalParser::constructAstCmpr(void){ /* cmpr : val (EQ|NEQ) val | LPAREN expr RPAREN NOT ir ? @@ -125,7 +129,7 @@ std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstC } } -std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstExpr(std::size_t precLimit /*= 0*/){ +std::shared_ptr<Aidge::AstNode<Aidge::ConditionalTokenTypes>> Aidge::ConditionalParser::constructAstExpr(std::size_t precLimit /*= 0*/){ /* expr : cmpr ((AND | OR) cmpr)* the NOT is not binary OP can be use in pratt @@ -134,27 +138,27 @@ std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstE OR */ - //the not + //the not std::shared_ptr<AstNode<ConditionalTokenTypes>> left; std::shared_ptr<ParsingToken<ConditionalTokenTypes>> token = mCurrentToken->copy(); - + if (mCurrentToken->getType() == ConditionalTokenTypes::NOT ){ ackToken(ConditionalTokenTypes::NOT ); left= std::make_shared<AstNode<ConditionalTokenTypes>>(token,ASTNodeCh{constructAstCmpr()}); }else{ left= constructAstCmpr(); } - + //pratt - while (mCurrentToken->getType() != ConditionalTokenTypes::STOP ) //security + while (mCurrentToken->getType() != ConditionalTokenTypes::STOP ) //security { token = mCurrentToken->copy(); - //if the token is not in the map is not a operator so we consider a prec of 0 + //if the token is not in the map is not a operator so we consider a prec of 0 if (ConditionalPrec.find(token->getType()) ==ConditionalPrec.end() ){ return left; } - //if my actual operator have a prec <= of the last operator + //if my actual operator have a prec <= of the last operator std::size_t prec = ConditionalPrec.at(token->getType()); if (prec <= precLimit){ return left; @@ -165,7 +169,7 @@ std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstE std::shared_ptr<AstNode<ConditionalTokenTypes>> right = constructAstExpr(prec); - //i'm not sur what append to newNode + //i'm not sur what append to newNode //std::shared_ptr<AstNode<ConditionalTokenTypes>> newNode = std::make_shared<AstNode<ConditionalTokenTypes>>(token,ASTNodeCh{left,constructAstCmpr()}); std::shared_ptr<AstNode<ConditionalTokenTypes>> newNode = std::make_shared<AstNode<ConditionalTokenTypes>>(token,ASTNodeCh{left,right}); left = newNode; @@ -174,10 +178,10 @@ std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::constructAstE } -std::shared_ptr<AstNode<ConditionalTokenTypes>> ConditionalParser::parse(void){ +std::shared_ptr<Aidge::AstNode<Aidge::ConditionalTokenTypes>> Aidge::ConditionalParser::parse(void){ /* expr : cmpr ((AND | OR) cmpr)* - cmpr : val (EQ|NEQ) val | LPAREN expr RPAREN | BOOL | LAMBDA + cmpr : val (EQ|NEQ) val | LPAREN expr RPAREN | BOOL | LAMBDA val : (KEY|INTEGER|FOAT|STRING|LAMBDA) lambda : LAMBDA val (ARGSEP val)* RPAREN */