picceler
Loading...
Searching...
No Matches
parser.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <vector>
5#include <string>
6
7#include "ast.h"
8#include "lexer.h"
9
10namespace picceler {
11
15class Parser {
16public:
20 Parser();
21
25 explicit Parser(std::vector<Token> tokens);
26
27 void setTokens(std::vector<Token> tokens) {
28 _tokens = std::move(tokens);
29 _index = 0;
30 }
31
37
44 void printAST(const std::unique_ptr<ModuleNode> &node, int indent = 0);
45
46private:
47 const Token &peek() const;
48 const Token &peekAhead(std::size_t offset) const;
49 bool check(Token::Type type) const;
50
51 const Token &advance();
52
53 bool match(Token::Type type);
54
55 Result<Token> consume(Token::Type type, std::string_view errorMessage);
56
57 bool isAtEnd() const;
58
63 Result<std::unique_ptr<ASTNode>> parseStatement();
64 Result<std::unique_ptr<ASTNode>> parseExpression();
65 Result<std::unique_ptr<ASTNode>> parseFunctionDefinition();
66 Result<std::unique_ptr<ASTNode>> parseAssignment(const Token &identifier);
67 Result<std::unique_ptr<ASTNode>> parseCall(const Token &identifier);
68 Result<std::unique_ptr<ASTNode>> parseVariable(const Token &identifier = Token{Token::Type::UNKNOWN, "", {}});
72
73 Result<std::unique_ptr<ASTNode>> parseRelational();
74 Result<std::unique_ptr<ASTNode>> parseAdditive();
75 Result<std::unique_ptr<ASTNode>> parseMultiplicative();
76 Result<std::unique_ptr<ASTNode>> parsePrimary();
77 Result<std::unique_ptr<ASTNode>> parseIfStatement();
81
82private:
83 // Lexer _lexer;
84 std::vector<Token> _tokens;
85 std::size_t _index;
86};
87
88} // namespace picceler
Parser()
Constructs a Parser without tokens.
Definition parser.cpp:13
Result< std::unique_ptr< ModuleNode > > parse()
Parses the tokens into an AST.
Definition parser.cpp:17
void printAST(const std::unique_ptr< ModuleNode > &node, int indent=0)
Prints the AST in a human-readable format.
Definition parser.cpp:36
void setTokens(std::vector< Token > tokens)
Definition parser.h:27
Lexer for the picceler programming language.
Definition ast.h:11
std::expected< T, CompileError > Result
A type alias for the result of a compilation operation.
Definition error.h:59
Represents a token produced by the lexer.
Definition lexer.h:26
Type
The type of the token.
Definition lexer.h:28
@ UNKNOWN
Definition lexer.h:57