57 lines
2.4 KiB
C++
57 lines
2.4 KiB
C++
//============================================================================//
|
|
// //
|
|
// artichoke programming language //
|
|
// //
|
|
// Copyright (C) 2025 Erick Saul Guzman Ramos, whoami.artichoke.dev //
|
|
// //
|
|
// //
|
|
// This program is free software: you can redistribute it and/or modify //
|
|
// it under the terms of the GNU Affero General Public License as published //
|
|
// by the Free Software Foundation, either version 3 of the License, or //
|
|
// (at your option) any later version. //
|
|
// //
|
|
// This program is distributed in the hope that it will be useful, //
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
|
// GNU Affero General Public License for more details. //
|
|
// //
|
|
// You should have received a copy of the GNU Affero General Public License //
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>. //
|
|
// //
|
|
//============================================================================//
|
|
|
|
#pragma once
|
|
|
|
#include <artichoke/Parser/AST/Common.hpp>
|
|
#include <artichoke/Parser/AST/Declarations.hpp>
|
|
|
|
namespace arti::lang::ast {
|
|
|
|
namespace nodes {
|
|
/* Forward declaration of types */
|
|
|
|
/* Main declaration node types */
|
|
struct CompilationUnit;
|
|
|
|
} // namespace nodes
|
|
|
|
/* Public Aliases */
|
|
using CompilationUnitNode = Ptr<nodes::CompilationUnit>;
|
|
using AST = CompilationUnitNode;
|
|
|
|
/* Node definitions */
|
|
struct nodes::CompilationUnit {
|
|
String unitName;
|
|
Vector<TopLevelDeclNode> declarations;
|
|
};
|
|
|
|
template <ASTNodePtr Node>
|
|
auto MakeNode() {
|
|
return std::make_unique<typename Node::element_type>();
|
|
}
|
|
|
|
std::string toDot(const AST &tree);
|
|
std::string toString(const AST &tree, std::string prefix = "");
|
|
|
|
} // namespace arti::lang::ast
|