diff options
Diffstat (limited to '')
-rw-r--r-- | server/parser/error.hpp | 6 | ||||
-rw-r--r-- | server/parser/operator.hpp | 13 | ||||
-rw-r--r-- | server/parser/parser.hpp | 19 |
3 files changed, 14 insertions, 24 deletions
diff --git a/server/parser/error.hpp b/server/parser/error.hpp index 66d6e45..6862a8f 100644 --- a/server/parser/error.hpp +++ b/server/parser/error.hpp @@ -13,9 +13,7 @@ namespace math::server { class ParserError : public Error { public: - explicit ParserError(const std::string& what) - : Error{"parser error: " + what} - { } + explicit ParserError(const std::string& what) : Error{"parser error: " + what} {} }; -} +} // namespace math::server diff --git a/server/parser/operator.hpp b/server/parser/operator.hpp index fd45aa2..9030c65 100644 --- a/server/parser/operator.hpp +++ b/server/parser/operator.hpp @@ -5,10 +5,9 @@ #pragma once -#include "error.hpp" - #include "../lexer/token.hpp" #include "../lexer/token_type.hpp" +#include "error.hpp" #include <cmath> @@ -72,9 +71,7 @@ public: } } - bool is_left_associative() const { - return !is_right_associative(); - } + bool is_left_associative() const { return !is_right_associative(); } double exec(double lhs, double rhs) const { switch (m_type) { @@ -103,11 +100,9 @@ public: } private: - explicit BinaryOp(const Token& token) - : m_type{token.get_type()} - { } + explicit BinaryOp(const Token& token) : m_type{token.get_type()} {} Type m_type; }; -} +} // namespace math::server::parser diff --git a/server/parser/parser.hpp b/server/parser/parser.hpp index 0a8c761..844b36e 100644 --- a/server/parser/parser.hpp +++ b/server/parser/parser.hpp @@ -5,11 +5,10 @@ #pragma once +#include "../lexer/lexer.hpp" #include "error.hpp" #include "operator.hpp" -#include "../lexer/lexer.hpp" - #include <optional> #include <string_view> @@ -24,9 +23,7 @@ public: // a finer algorithm for parsing arithmetic expressions. // Reference: https://en.wikipedia.org/wiki/Operator-precedence_parser - explicit Parser(const std::string_view& input) - : m_lexer{input} - { } + explicit Parser(const std::string_view& input) : m_lexer{input} {} double exec() { const auto result = exec_dmas(); @@ -38,9 +35,7 @@ public: private: // DMAS as in Division, Multiplication, Addition and Subtraction - double exec_dmas() { - return exec_binary_op(exec_factor(), parser::BinaryOp::min_precedence()); - } + double exec_dmas() { return exec_binary_op(exec_factor(), parser::BinaryOp::min_precedence()); } // Exponentiation operator double exec_exp() { @@ -61,7 +56,8 @@ private: { const auto acc_left_assoc = next.is_left_associative() && next_prec > prev_prec; - const auto acc_right_assoc = next.is_right_associative() && next_prec == prev_prec; + const auto acc_right_assoc = + next.is_right_associative() && next_prec == prev_prec; const auto acc = acc_left_assoc || acc_right_assoc; if (!acc) { @@ -109,7 +105,8 @@ private: if (m_lexer.drop_token_of_type(Type::LEFT_PAREN).has_value()) { const auto inner = exec_dmas(); - if (!m_lexer.has_token() || !m_lexer.drop_token_of_type(Type::RIGHT_PAREN).has_value()) { + if (!m_lexer.has_token() || + !m_lexer.drop_token_of_type(Type::RIGHT_PAREN).has_value()) { throw ParserError{"missing closing ')'"}; } return inner; @@ -125,4 +122,4 @@ private: Lexer m_lexer; }; -} +} // namespace math::server |