diff --git a/src/language/ASTBuilder.cpp b/src/language/ASTBuilder.cpp index 67485c29717aee0910db7427733f5c5d10bee041..6790f5bc6cfde884b963abee09c0a3eacf3ee1d4 100644 --- a/src/language/ASTBuilder.cpp +++ b/src/language/ASTBuilder.cpp @@ -260,11 +260,11 @@ using selector = ASTBuilder::simplify_stream_statement::on<ostream_statement>>; template <typename InputT> -std::unique_ptr<language::ASTNode> +std::unique_ptr<ASTNode> ASTBuilder::build(InputT& input) { - return parse_tree::parse<language::grammar, language::ASTNode, selector, nothing, language::errors>(input); + return parse_tree::parse<language::grammar, ASTNode, selector, nothing, language::errors>(input); } -template std::unique_ptr<language::ASTNode> ASTBuilder::build(read_input<>& input); -template std::unique_ptr<language::ASTNode> ASTBuilder::build(string_input<>& input); +template std::unique_ptr<ASTNode> ASTBuilder::build(read_input<>& input); +template std::unique_ptr<ASTNode> ASTBuilder::build(string_input<>& input); diff --git a/src/language/ASTBuilder.hpp b/src/language/ASTBuilder.hpp index 048c771992642ef5b3c3b92f05181e99fea5f18c..f13532e31cba43e91d85262483f3813e828766f9 100644 --- a/src/language/ASTBuilder.hpp +++ b/src/language/ASTBuilder.hpp @@ -18,7 +18,7 @@ struct ASTBuilder public: template <typename InputT> - static std::unique_ptr<language::ASTNode> build(InputT& input); + static std::unique_ptr<ASTNode> build(InputT& input); }; #endif // AST_BUILDER_HPP diff --git a/src/language/ASTNode.hpp b/src/language/ASTNode.hpp index a485cf787522d1769313f10b1eabdc799e3f1a57..4b1886a660b97e658675e8620c513716a6d490cb 100644 --- a/src/language/ASTNode.hpp +++ b/src/language/ASTNode.hpp @@ -10,8 +10,6 @@ using namespace TAO_PEGTL_NAMESPACE; -namespace language -{ struct ExecUntilBreakOrContinue { enum class JumpType @@ -52,7 +50,6 @@ struct ExecUntilBreakOrContinue } }; -class SymbolTable; class INodeProcessor { public: @@ -65,8 +62,13 @@ class INodeProcessor virtual ~INodeProcessor() {} }; +class SymbolTable; + struct ASTNode : public parse_tree::basic_node<ASTNode> { + using DataType = language::DataType; + using DataVariant = language::DataVariant; + std::shared_ptr<SymbolTable> m_symbol_table; std::unique_ptr<INodeProcessor> m_node_processor; @@ -83,6 +85,5 @@ struct ASTNode : public parse_tree::basic_node<ASTNode> DataType m_data_type{DataType::undefined_t}; DataVariant m_value; }; -} // namespace language #endif // AST_NODE_HPP diff --git a/src/language/ASTPrinter.cpp b/src/language/ASTPrinter.cpp index 0664cb358ef5afcf29b0ce310f3fad510a0faa49..aab87af9ead8c199a2cf6f3ad270044e3d025d9c 100644 --- a/src/language/ASTPrinter.cpp +++ b/src/language/ASTPrinter.cpp @@ -85,8 +85,7 @@ operator<<(std::ostream& os, const ASTPrinter& ast_printer) return os; } -ASTPrinter::ASTPrinter(const language::ASTNode& node, Format format, std::initializer_list<Info> initializer_list) - : m_node{node} +ASTPrinter::ASTPrinter(const ASTNode& node, Format format, std::initializer_list<Info> initializer_list) : m_node{node} { if (format == Format::pretty) { T_junction = " \u251c\u2500\u2500"; diff --git a/src/language/ASTSymbolTableBuilder.cpp b/src/language/ASTSymbolTableBuilder.cpp index a0f525522dbbbe7a5b6094684ba292e9b51bceab..ef16c6894fc3b8687544cb91cc29cb6b2c5dd96c 100644 --- a/src/language/ASTSymbolTableBuilder.cpp +++ b/src/language/ASTSymbolTableBuilder.cpp @@ -3,8 +3,6 @@ #include <PEGGrammar.hpp> -namespace language -{ void ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable>& symbol_table) { @@ -53,4 +51,3 @@ ASTSymbolTableBuilder::ASTSymbolTableBuilder(ASTNode& node) this->buildSymbolTable(node, symbol_table); std::cout << " - checked symbols declaration\n"; } -} // namespace language diff --git a/src/language/ASTSymbolTableBuilder.hpp b/src/language/ASTSymbolTableBuilder.hpp index 86dc7ada7e1c0d86ab7375c100474c1dd791a648..4a7d7563abc3f10aceec990a6c25bc9482a0ed0b 100644 --- a/src/language/ASTSymbolTableBuilder.hpp +++ b/src/language/ASTSymbolTableBuilder.hpp @@ -2,10 +2,7 @@ #define AST_SYMBOL_TABLE_BUILDER_HPP #include <ASTNode.hpp> - -namespace language -{ -class SymbolTable; +#include <SymbolTable.hpp> class ASTSymbolTableBuilder { @@ -19,6 +16,5 @@ class ASTSymbolTableBuilder ~ASTSymbolTableBuilder() = default; }; -} // namespace language #endif // AST_SYMBOL_TABLE_BUILDER_HPP diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp index adff2aa4a7b358b7e573ec580c44ae6ed55be7f5..d2d3c89102289daca1680926edf11d16eee70d9d 100644 --- a/src/language/PugsParser.cpp +++ b/src/language/PugsParser.cpp @@ -408,13 +408,13 @@ parser(const std::string& filename) std::cout << rang::style::bold << "Parsing file " << rang::style::reset << rang::style::underline << filename << rang::style::reset << " ...\n"; - std::unique_ptr<language::ASTNode> root_node; + std::unique_ptr<ASTNode> root_node; read_input input(filename); try { root_node = ASTBuilder::build(input); std::cout << " - AST is built ...... [done]\n"; - language::ASTSymbolTableBuilder{*root_node}; + ASTSymbolTableBuilder{*root_node}; language::check_symbol_initialization(*root_node); { @@ -438,7 +438,7 @@ parser(const std::string& filename) std::cout << language::ASTPrinter{*root_node} << '\n'; - language::ExecUntilBreakOrContinue exec_all; + ExecUntilBreakOrContinue exec_all; root_node->execute(exec_all); std::cout << *(root_node->m_symbol_table) << '\n'; } diff --git a/src/language/SymbolTable.hpp b/src/language/SymbolTable.hpp index e2e874f5b56b8aa4dec559a1753828c2f2e12c99..3cfd66a5b392a852ca752de777a99a09d3bf46dd 100644 --- a/src/language/SymbolTable.hpp +++ b/src/language/SymbolTable.hpp @@ -1,12 +1,17 @@ #ifndef SYMBOL_TABLE_HPP #define SYMBOL_TABLE_HPP -namespace language -{ +#include <ASTNodeDataType.hpp> + class SymbolTable { + public: class Attributes { + private: + using DataType = language::DataType; + using DataVariant = language::DataVariant; + bool m_is_initialized{false}; DataType m_data_type{DataType::undefined_t}; DataVariant m_value; @@ -121,6 +126,5 @@ class SymbolTable ; } }; -} // namespace language #endif // SYMBOL_TABLE_HPP