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.
79 lines
1.7 KiB
C++
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;
|
|
};
|
|
|
|
}
|