From 7f5e6688596f2f267f2998daf4e056f64c1291b6 Mon Sep 17 00:00:00 2001 From: NAUD Maxence <maxence.naud@cea.fr> Date: Mon, 27 Nov 2023 13:18:41 +0000 Subject: [PATCH] Fix Parser destructors inline error and remove 'using namespace' from cpp files --- include/aidge/graphRegex/GraphParser.hpp | 8 ++-- .../aidge/nodeTester/ConditionalParser.hpp | 4 +- src/graphRegex/GraphParser.cpp | 44 ++++++++++--------- src/nodeTester/ConditionalParser.cpp | 40 +++++++++-------- 4 files changed, 54 insertions(+), 42 deletions(-) diff --git a/include/aidge/graphRegex/GraphParser.hpp b/include/aidge/graphRegex/GraphParser.hpp index cfe25c227..2c25ac0b7 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 c21eca040..1f3671ea5 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 9c3d10114..9ad96a34b 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 3ca2843aa..ba40c5613 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 */ -- GitLab