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
26 Result<void> setSource(const std::string &source);
27
33
39
46 void printAST(const std::unique_ptr<ModuleNode> &node, int indent = 0);
47
48private:
53 Result<std::unique_ptr<ASTNode>> parseStatement();
54 Result<std::unique_ptr<ASTNode>> parseExpression();
55 Result<std::unique_ptr<ASTNode>> parseAssignment(Token identifier);
56 Result<std::unique_ptr<ASTNode>> parseCall(Token identifier);
57 Result<std::unique_ptr<ASTNode>> parseVariable(Token identifier = Token{Token::Type::UNKNOWN, "", 0, 0});
64
65private:
66 Lexer _lexer;
67};
68
69} // namespace picceler
Lexical analyzer for the picceler programming language.
Definition lexer.h:55
Parser()
Constructs a Parser.
Definition parser.cpp:13
Result< std::unique_ptr< ModuleNode > > parse()
Parses the tokens into an AST.
Definition parser.cpp:25
Result< std::vector< Token > > getTokens()
Retrieves all tokens from the lexer.
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:427
Result< void > setSource(const std::string &source)
Sets the source file for the parser.
Definition parser.cpp:15
Lexer for the picceler programming language.
Definition ast.h:11
std::expected< T, CompileError > Result
Definition error.h:33
Represents a token produced by the lexer.
Definition lexer.h:27
@ UNKNOWN
Definition lexer.h:29