picceler
A compiled DSL for image processing, built on MLIR
Loading...
Searching...
No Matches
parser.h
Go to the documentation of this file.
1#pragma once
2
3#include <error.h>
4#include <memory>
5#include <vector>
6#include <string>
7
8#include "ast.h"
9#include "lexer.h"
10
11namespace picceler {
12
16class Parser {
17public:
21 Parser();
22
26 explicit Parser(std::vector<Token> tokens);
27
28 void setTokens(std::vector<Token> tokens) {
29 _tokens = std::move(tokens);
30 _index = 0;
31 }
32
38
45 void printAST(const std::unique_ptr<ModuleNode> &node, int indent = 0);
46
47private:
48 const Token &peek() const;
49 const Token &peekAhead(std::size_t offset) const;
50 bool check(Token::Type type) const;
51
52 const Token &advance();
53
54 bool match(Token::Type type);
55
56 Result<Token> consume(Token::Type type, std::string_view errorMessage);
57
64 Result<Token> parseTypeToken(std::string_view errorMessage);
65
66 bool isAtEnd() const;
67
72 Result<std::unique_ptr<ASTNode>> parseStatement();
73 Result<std::unique_ptr<ASTNode>> parseExpression();
74 Result<std::unique_ptr<ASTNode>> parseFunctionDefinition();
75 Result<std::unique_ptr<ASTNode>> parseAssignment(const Token &type, const Token &identifier);
76 Result<std::unique_ptr<ASTNode>> parseCall(const Token &identifier);
77 Result<std::unique_ptr<ASTNode>> parseVariable(const Token &type, const Token &identifier);
78 Result<std::unique_ptr<ASTNode>> parseVariable(const Token &identifier);
82
83 Result<std::unique_ptr<ASTNode>> parseRelational();
84 Result<std::unique_ptr<ASTNode>> parseAdditive();
85 Result<std::unique_ptr<ASTNode>> parseMultiplicative();
86 Result<std::unique_ptr<ASTNode>> parsePrimary();
87 Result<std::unique_ptr<ASTNode>> parseIfStatement();
88 Result<std::unique_ptr<ASTNode>> parseForStatement();
89 Result<std::unique_ptr<ASTNode>> parseReturnStatement();
93
94private:
95 std::vector<Token> _tokens;
96 std::size_t _index;
97};
98
99} // namespace picceler
Parser()
Constructs a Parser without tokens.
Definition parser.cpp:14
Result< std::unique_ptr< ModuleNode > > parse()
Parses the tokens into an AST.
Definition parser.cpp:18
void printAST(const std::unique_ptr< ModuleNode > &node, int indent=0)
Prints the AST in a human-readable format.
Definition parser.cpp:37
void setTokens(std::vector< Token > tokens)
Definition parser.h:28
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