erick-alcachofa 552cda58e7
feat(Parser): Introduce AST toString and basic parser structure
Signed-off-by: erick-alcachofa <erick@artichoke.dev>

This commit introduces the foundational structure for the parser and
Abstract Syntax Tree (AST). It includes a new `Parser.hpp` header that
outlines the primary parsing functions for top-level declarations like
`modules`, `structs`, `enums`, and `functions`. It also adds a
`toString` function for the AST to aid in debugging and visualization.

The commit also updates the `Expected.hpp` utility by adding new error
codes like `ecUnexpectedToken`, `ecExpectedSemicolon`,
`ecImportInsideModule`, and `ecUnimplemented` to provide more granular
and descriptive parsing errors. The `Tokenizer` has been updated to use
these new, more specific exceptions.
2025-10-15 16:12:19 -06:00

79 lines
1.7 KiB
C++

#pragma once
#include <artichoke/Parser/AST/AST.hpp>
#include <artichoke/Tokenizer/Tokenizer.hpp>
namespace arti::lang {
struct Parser {
Parser(std::string source) noexcept;
Parser(std::string unitName, std::string source) noexcept;
Parser(Parser &&) noexcept;
Parser &operator=(Parser &&) noexcept;
Parser(const Parser &) noexcept = delete;
Parser &operator=(const Parser &) noexcept = delete;
Expected<ast::AST> parse();
Expected<ast::Optional<ast::TopLevelDeclNode>>
parseTopLevelDeclaration();
Expected<ast::ImportDeclNode>
parseImportDeclaration();
Expected<ast::AliasDeclNode>
parseAliasDeclaration();
Expected<ast::ModuleDeclNode>
parseModuleDeclaration();
Expected<ast::StructDeclNode>
parseStructDeclaration();
Expected<ast::EnumDeclNode>
parseEnumDeclaration();
Expected<ast::Vector<ast::GenericParamNode>>
parseGenericParamsList();
Expected<ast::GenericParamNode>
parseGenericParam();
Expected<ast::Vector<ast::StructMemberNode>>
parseStructMembersList();
Expected<ast::StructMemberNode>
parseStructMember();
Expected<ast::Vector<ast::EnumMemberNode>>
parseEnumMembersList();
Expected<ast::EnumMemberNode>
parseEnumMember();
Expected<ast::FunctionDeclNode>
parseFunctionDeclaration();
Expected<ast::NamespacedIdentifierNode>
parseNamespacedIdentifier();
Expected<ast::TypeNode>
parseType();
Expected<ast::Vector<ast::TypeQualifier>>
parseTypeQualifiers();
Expected<ast::Vector<ast::TypeNode>>
parseGenericArgumentsList();
private:
std::string unitName;
std::string sourceCode;
Tokenizer tokenizer;
};
}