From 4ef38264c8d02c594856be3c0b3cb14f17150022 Mon Sep 17 00:00:00 2001 From: Jan Date: Mon, 5 Sep 2022 20:17:31 +0200 Subject: [PATCH] Rename defines if directive parsing to defines directive parsing --- .../DefinesDirectiveExpressionSequence.cpp | 16 ++++++++++++++ .../DefinesDirectiveExpressionSequence.h | 13 +++++++++++ .../Impl/Defines/DefinesDirectiveParser.cpp | 22 +++++++++++++++++++ .../Impl/Defines/DefinesDirectiveParser.h | 17 ++++++++++++++ .../Defines/DefinesDirectiveParsingState.cpp | 6 +++++ ...State.h => DefinesDirectiveParsingState.h} | 4 ++-- ...hers.cpp => DefinesExpressionMatchers.cpp} | 12 +++++----- ...Matchers.h => DefinesExpressionMatchers.h} | 10 ++++----- .../DefinesIfDirectiveExpressionSequence.cpp | 16 -------------- .../DefinesIfDirectiveExpressionSequence.h | 13 ----------- .../Impl/Defines/DefinesIfDirectiveParser.cpp | 22 ------------------- .../Impl/Defines/DefinesIfDirectiveParser.h | 17 -------------- .../DefinesIfDirectiveParsingState.cpp | 6 ----- .../Parsing/Impl/DefinesStreamProxy.cpp | 10 ++++----- src/Parser/Parsing/Impl/DefinesStreamProxy.h | 3 ++- 15 files changed, 94 insertions(+), 93 deletions(-) create mode 100644 src/Parser/Parsing/Impl/Defines/DefinesDirectiveExpressionSequence.cpp create mode 100644 src/Parser/Parsing/Impl/Defines/DefinesDirectiveExpressionSequence.h create mode 100644 src/Parser/Parsing/Impl/Defines/DefinesDirectiveParser.cpp create mode 100644 src/Parser/Parsing/Impl/Defines/DefinesDirectiveParser.h create mode 100644 src/Parser/Parsing/Impl/Defines/DefinesDirectiveParsingState.cpp rename src/Parser/Parsing/Impl/Defines/{DefinesIfDirectiveParsingState.h => DefinesDirectiveParsingState.h} (66%) rename src/Parser/Parsing/Impl/Defines/{DefinesIfExpressionMatchers.cpp => DefinesExpressionMatchers.cpp} (57%) rename src/Parser/Parsing/Impl/Defines/{DefinesIfExpressionMatchers.h => DefinesExpressionMatchers.h} (59%) delete mode 100644 src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveExpressionSequence.cpp delete mode 100644 src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveExpressionSequence.h delete mode 100644 src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParser.cpp delete mode 100644 src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParser.h delete mode 100644 src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParsingState.cpp diff --git a/src/Parser/Parsing/Impl/Defines/DefinesDirectiveExpressionSequence.cpp b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveExpressionSequence.cpp new file mode 100644 index 00000000..26c8bc53 --- /dev/null +++ b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveExpressionSequence.cpp @@ -0,0 +1,16 @@ +#include "DefinesDirectiveExpressionSequence.h" + +#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" +#include "DefinesExpressionMatchers.h" + +DefinesDirectiveExpressionSequence::DefinesDirectiveExpressionSequence() +{ + const SimpleMatcherFactory create(this); + AddLabeledMatchers(DefinesExpressionMatchers().Expression(this), SimpleExpressionMatchers::LABEL_EXPRESSION); + AddMatchers(create.Label(SimpleExpressionMatchers::LABEL_EXPRESSION)); +} + +void DefinesDirectiveExpressionSequence::ProcessMatch(DefinesDirectiveParsingState* state, SequenceResult& result) const +{ + state->m_expression = DefinesExpressionMatchers(state).ProcessExpression(result); +} diff --git a/src/Parser/Parsing/Impl/Defines/DefinesDirectiveExpressionSequence.h b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveExpressionSequence.h new file mode 100644 index 00000000..24f156c7 --- /dev/null +++ b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveExpressionSequence.h @@ -0,0 +1,13 @@ +#pragma once + +#include "DefinesDirectiveParser.h" +#include "DefinesDirectiveParsingState.h" + +class DefinesDirectiveExpressionSequence final : public DefinesDirectiveParser::sequence_t +{ +public: + DefinesDirectiveExpressionSequence(); + +protected: + void ProcessMatch(DefinesDirectiveParsingState* state, SequenceResult& result) const override; +}; diff --git a/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParser.cpp b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParser.cpp new file mode 100644 index 00000000..b0491132 --- /dev/null +++ b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParser.cpp @@ -0,0 +1,22 @@ +#include "DefinesDirectiveParser.h" + +#include "DefinesDirectiveExpressionSequence.h" + +DefinesDirectiveParser::DefinesDirectiveParser(ILexer* lexer, const std::map& defines) + : AbstractParser(lexer, std::make_unique(defines)) +{ +} + +const std::vector::sequence_t*>& DefinesDirectiveParser::GetTestsForState() +{ + static std::vector sequences + { + new DefinesDirectiveExpressionSequence() + }; + return sequences; +} + +std::unique_ptr DefinesDirectiveParser::GetParsedExpression() const +{ + return std::move(m_state->m_expression); +} diff --git a/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParser.h b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParser.h new file mode 100644 index 00000000..8fb72f30 --- /dev/null +++ b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParser.h @@ -0,0 +1,17 @@ +#pragma once + +#include "DefinesDirectiveParsingState.h" +#include "Parsing/Impl/AbstractParser.h" +#include "Parsing/Simple/SimpleParserValue.h" + +class DefinesDirectiveParser final : public AbstractParser +{ +public: + DefinesDirectiveParser(ILexer* lexer, const std::map& defines); + +protected: + const std::vector& GetTestsForState() override; + +public: + _NODISCARD std::unique_ptr GetParsedExpression() const; +}; diff --git a/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParsingState.cpp b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParsingState.cpp new file mode 100644 index 00000000..469eef39 --- /dev/null +++ b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParsingState.cpp @@ -0,0 +1,6 @@ +#include "DefinesDirectiveParsingState.h" + +DefinesDirectiveParsingState::DefinesDirectiveParsingState(const std::map& defines) + : m_defines(defines) +{ +} diff --git a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParsingState.h b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParsingState.h similarity index 66% rename from src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParsingState.h rename to src/Parser/Parsing/Impl/Defines/DefinesDirectiveParsingState.h index bbbd611f..1b04aa1a 100644 --- a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParsingState.h +++ b/src/Parser/Parsing/Impl/Defines/DefinesDirectiveParsingState.h @@ -6,11 +6,11 @@ #include "Parsing/Impl/DefinesStreamProxy.h" #include "Parsing/Simple/Expression/ISimpleExpression.h" -class DefinesIfDirectiveParsingState +class DefinesDirectiveParsingState { public: const std::map& m_defines; std::unique_ptr m_expression; - explicit DefinesIfDirectiveParsingState(const std::map& defines); + explicit DefinesDirectiveParsingState(const std::map& defines); }; diff --git a/src/Parser/Parsing/Impl/Defines/DefinesIfExpressionMatchers.cpp b/src/Parser/Parsing/Impl/Defines/DefinesExpressionMatchers.cpp similarity index 57% rename from src/Parser/Parsing/Impl/Defines/DefinesIfExpressionMatchers.cpp rename to src/Parser/Parsing/Impl/Defines/DefinesExpressionMatchers.cpp index 4dc24b3e..e5638414 100644 --- a/src/Parser/Parsing/Impl/Defines/DefinesIfExpressionMatchers.cpp +++ b/src/Parser/Parsing/Impl/Defines/DefinesExpressionMatchers.cpp @@ -1,19 +1,19 @@ -#include "DefinesIfExpressionMatchers.h" +#include "DefinesExpressionMatchers.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" -DefinesIfExpressionMatchers::DefinesIfExpressionMatchers() - : DefinesIfExpressionMatchers(nullptr) +DefinesExpressionMatchers::DefinesExpressionMatchers() + : DefinesExpressionMatchers(nullptr) { } -DefinesIfExpressionMatchers::DefinesIfExpressionMatchers(const DefinesIfDirectiveParsingState* state) +DefinesExpressionMatchers::DefinesExpressionMatchers(const DefinesDirectiveParsingState* state) : SimpleExpressionMatchers(false, false, true, true, false), m_state(state) { } -std::unique_ptr DefinesIfExpressionMatchers::ParseOperandExtension(const supplier_t* labelSupplier) const +std::unique_ptr DefinesExpressionMatchers::ParseOperandExtension(const supplier_t* labelSupplier) const { const SimpleMatcherFactory create(labelSupplier); @@ -25,7 +25,7 @@ std::unique_ptr DefinesIfExpressionMatchers }); } -std::unique_ptr DefinesIfExpressionMatchers::ProcessOperandExtension(SequenceResult& result) const +std::unique_ptr DefinesExpressionMatchers::ProcessOperandExtension(SequenceResult& result) const { const auto& defineCapture = result.NextCapture(CAPTURE_DEFINE_NAME); diff --git a/src/Parser/Parsing/Impl/Defines/DefinesIfExpressionMatchers.h b/src/Parser/Parsing/Impl/Defines/DefinesExpressionMatchers.h similarity index 59% rename from src/Parser/Parsing/Impl/Defines/DefinesIfExpressionMatchers.h rename to src/Parser/Parsing/Impl/Defines/DefinesExpressionMatchers.h index 95995c8a..8ccc384a 100644 --- a/src/Parser/Parsing/Impl/Defines/DefinesIfExpressionMatchers.h +++ b/src/Parser/Parsing/Impl/Defines/DefinesExpressionMatchers.h @@ -2,20 +2,20 @@ #include -#include "DefinesIfDirectiveParsingState.h" +#include "DefinesDirectiveParsingState.h" #include "Parsing/Simple/Expression/SimpleExpressionMatchers.h" -class DefinesIfExpressionMatchers final : public SimpleExpressionMatchers +class DefinesExpressionMatchers final : public SimpleExpressionMatchers { static constexpr auto CAPTURE_DEFINE_NAME = CAPTURE_OFFSET_EXPRESSION_EXT + 1; - const DefinesIfDirectiveParsingState* m_state; + const DefinesDirectiveParsingState* m_state; protected: std::unique_ptr ParseOperandExtension(const supplier_t* labelSupplier) const override; std::unique_ptr ProcessOperandExtension(SequenceResult& result) const override; public: - DefinesIfExpressionMatchers(); - explicit DefinesIfExpressionMatchers(const DefinesIfDirectiveParsingState* state); + DefinesExpressionMatchers(); + explicit DefinesExpressionMatchers(const DefinesDirectiveParsingState* state); }; diff --git a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveExpressionSequence.cpp b/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveExpressionSequence.cpp deleted file mode 100644 index d3e68051..00000000 --- a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveExpressionSequence.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "DefinesIfDirectiveExpressionSequence.h" - -#include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" -#include "DefinesIfExpressionMatchers.h" - -DefinesIfDirectiveExpressionSequence::DefinesIfDirectiveExpressionSequence() -{ - const SimpleMatcherFactory create(this); - AddLabeledMatchers(DefinesIfExpressionMatchers().Expression(this), SimpleExpressionMatchers::LABEL_EXPRESSION); - AddMatchers(create.Label(SimpleExpressionMatchers::LABEL_EXPRESSION)); -} - -void DefinesIfDirectiveExpressionSequence::ProcessMatch(DefinesIfDirectiveParsingState* state, SequenceResult& result) const -{ - state->m_expression = DefinesIfExpressionMatchers(state).ProcessExpression(result); -} diff --git a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveExpressionSequence.h b/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveExpressionSequence.h deleted file mode 100644 index b06b301a..00000000 --- a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveExpressionSequence.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include "DefinesIfDirectiveParser.h" -#include "DefinesIfDirectiveParsingState.h" - -class DefinesIfDirectiveExpressionSequence final : public DefinesIfDirectiveParser::sequence_t -{ -public: - DefinesIfDirectiveExpressionSequence(); - -protected: - void ProcessMatch(DefinesIfDirectiveParsingState* state, SequenceResult& result) const override; -}; diff --git a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParser.cpp b/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParser.cpp deleted file mode 100644 index 4b93ad3d..00000000 --- a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParser.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "DefinesIfDirectiveParser.h" - -#include "DefinesIfDirectiveExpressionSequence.h" - -DefinesIfDirectiveParser::DefinesIfDirectiveParser(ILexer* lexer, const std::map& defines) - : AbstractParser(lexer, std::make_unique(defines)) -{ -} - -const std::vector::sequence_t*>& DefinesIfDirectiveParser::GetTestsForState() -{ - static std::vector sequences - { - new DefinesIfDirectiveExpressionSequence() - }; - return sequences; -} - -std::unique_ptr DefinesIfDirectiveParser::GetParsedExpression() const -{ - return std::move(m_state->m_expression); -} diff --git a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParser.h b/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParser.h deleted file mode 100644 index e962dde6..00000000 --- a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParser.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "DefinesIfDirectiveParsingState.h" -#include "Parsing/Impl/AbstractParser.h" -#include "Parsing/Simple/SimpleParserValue.h" - -class DefinesIfDirectiveParser final : public AbstractParser -{ -public: - DefinesIfDirectiveParser(ILexer* lexer, const std::map& defines); - -protected: - const std::vector& GetTestsForState() override; - -public: - _NODISCARD std::unique_ptr GetParsedExpression() const; -}; diff --git a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParsingState.cpp b/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParsingState.cpp deleted file mode 100644 index 8eaaf05a..00000000 --- a/src/Parser/Parsing/Impl/Defines/DefinesIfDirectiveParsingState.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "DefinesIfDirectiveParsingState.h" - -DefinesIfDirectiveParsingState::DefinesIfDirectiveParsingState(const std::map& defines) - : m_defines(defines) -{ -} diff --git a/src/Parser/Parsing/Impl/DefinesStreamProxy.cpp b/src/Parser/Parsing/Impl/DefinesStreamProxy.cpp index a4764b20..da089080 100644 --- a/src/Parser/Parsing/Impl/DefinesStreamProxy.cpp +++ b/src/Parser/Parsing/Impl/DefinesStreamProxy.cpp @@ -6,7 +6,7 @@ #include "Utils/ClassUtils.h" #include "AbstractParser.h" #include "ParserSingleInputStream.h" -#include "Defines/DefinesIfDirectiveParser.h" +#include "Defines/DefinesDirectiveParser.h" #include "Parsing/ParsingException.h" #include "Parsing/Simple/SimpleLexer.h" #include "Parsing/Simple/Expression/ISimpleExpression.h" @@ -278,7 +278,7 @@ bool DefinesStreamProxy::MatchUndefDirective(const ParserLine& line, const unsig return true; } -std::unique_ptr DefinesStreamProxy::ParseIfExpression(const std::string& expressionString) const +std::unique_ptr DefinesStreamProxy::ParseExpression(const std::string& expressionString) const { std::istringstream ss(expressionString); ParserSingleInputStream inputStream(ss, "#if expression"); @@ -291,7 +291,7 @@ std::unique_ptr DefinesStreamProxy::ParseIfExpression(const s SimpleExpressionMatchers().ApplyTokensToLexerConfig(lexerConfig); SimpleLexer lexer(&inputStream, std::move(lexerConfig)); - DefinesIfDirectiveParser parser(&lexer, m_defines); + DefinesDirectiveParser parser(&lexer, m_defines); if (!parser.Parse()) return nullptr; @@ -323,7 +323,7 @@ bool DefinesStreamProxy::MatchIfDirective(const ParserLine& line, const unsigned if (expressionString.empty()) throw ParsingException(CreatePos(line, currentPos), "Cannot if without an expression."); - const auto expression = ParseIfExpression(expressionString); + const auto expression = ParseExpression(expressionString); if (!expression) throw ParsingException(CreatePos(line, currentPos), "Failed to parse if expression"); @@ -365,7 +365,7 @@ bool DefinesStreamProxy::MatchElIfDirective(const ParserLine& line, const unsign if (expressionString.empty()) throw ParsingException(CreatePos(line, currentPos), "Cannot elif without an expression."); - const auto expression = ParseIfExpression(expressionString); + const auto expression = ParseExpression(expressionString); if (!expression) throw ParsingException(CreatePos(line, currentPos), "Failed to parse elif expression"); diff --git a/src/Parser/Parsing/Impl/DefinesStreamProxy.h b/src/Parser/Parsing/Impl/DefinesStreamProxy.h index 82edc827..9208d09f 100644 --- a/src/Parser/Parsing/Impl/DefinesStreamProxy.h +++ b/src/Parser/Parsing/Impl/DefinesStreamProxy.h @@ -66,7 +66,6 @@ private: static int GetLineEndEscapePos(const ParserLine& line); static std::vector MatchDefineParameters(const ParserLine& line, unsigned& parameterPosition); void ContinueDefine(const ParserLine& line); - _NODISCARD std::unique_ptr ParseIfExpression(const std::string& expressionString) const; _NODISCARD bool MatchDefineDirective(const ParserLine& line, unsigned directiveStartPosition, unsigned directiveEndPosition); _NODISCARD bool MatchUndefDirective(const ParserLine& line, unsigned directiveStartPosition, unsigned directiveEndPosition); _NODISCARD bool MatchIfDirective(const ParserLine& line, unsigned directiveStartPosition, unsigned directiveEndPosition); @@ -86,6 +85,8 @@ public: void AddDefine(Define define); void Undefine(const std::string& name); + _NODISCARD std::unique_ptr ParseExpression(const std::string& expressionString) const; + ParserLine NextLine() override; bool IncludeFile(const std::string& filename) override; void PopCurrentFile() override;