Phasor 3.3.0
Stack VM based Programming Language
Loading...
Searching...
No Matches
Parser.hpp
Go to the documentation of this file.
1#pragma once
3#include <memory>
4#include <optional>
5#include <vector>
6#include <filesystem>
8namespace Phasor
9{
10
12class Parser
13{
14 public:
15 Parser(const std::vector<Token> &tokens);
16 Parser(const std::vector<Token> &tokens, std::filesystem::path sourcePath);
17
18 void setSourcePath(const std::filesystem::path &path)
19 {
20 sourcePath = path;
21 }
22
23 std::unique_ptr<AST::Program> parse();
24
25 struct Error
26 {
27 std::string message;
28 size_t line;
29 size_t column;
30 };
31 [[nodiscard]] std::optional<Error> getError() const
32 {
33 return lastError;
34 }
35
36 private:
37 std::vector<Token> tokens;
38 int current = 0;
39 std::string currentFunction;
40 std::optional<Error> lastError;
41 std::filesystem::path sourcePath;
42
43 Token peek();
45 Token advance();
46 bool isAtEnd();
47 bool check(Phasor::TokenType type);
49 bool match(Phasor::TokenType type);
50 bool match(Phasor::TokenType type, const std::string &lexeme);
51 Token consume(Phasor::TokenType type, const std::string &message);
52 Token consume(Phasor::TokenType type, const std::string &lexeme, const std::string &message);
53 Token expect(Phasor::TokenType type, const std::string &message);
54
55 std::unique_ptr<AST::Statement> declaration();
56 std::unique_ptr<AST::Statement> varDeclaration();
57 std::unique_ptr<AST::Statement> functionDeclaration();
58 std::unique_ptr<AST::Statement> statement();
59 std::unique_ptr<AST::Statement> printStatement();
60 std::unique_ptr<AST::Statement> ifStatement();
61 std::unique_ptr<AST::Statement> whileStatement();
62 std::unique_ptr<AST::Statement> forStatement();
63 std::unique_ptr<AST::Statement> switchStatement();
64 std::unique_ptr<AST::Statement> returnStatement();
65 std::unique_ptr<AST::Statement> unsafeStatement();
66 std::unique_ptr<AST::BlockStmt> block();
67 std::unique_ptr<AST::Statement> importStatement();
68 std::unique_ptr<AST::Statement> exportStatement();
69 std::unique_ptr<AST::Statement> expressionStatement();
70 std::unique_ptr<AST::TypeNode> parseType();
71 std::unique_ptr<AST::Expression> expression();
72 std::unique_ptr<AST::Expression> assignment();
73 std::unique_ptr<AST::Expression> logicalOr();
74 std::unique_ptr<AST::Expression> logicalAnd();
75 std::unique_ptr<AST::Expression> equality();
76 std::unique_ptr<AST::Expression> comparison();
77 std::unique_ptr<AST::Expression> term();
78 std::unique_ptr<AST::Expression> factor();
79 std::unique_ptr<AST::Expression> unary();
80 std::unique_ptr<AST::Expression> call();
81 std::unique_ptr<AST::Expression> finishCall(std::unique_ptr<AST::Expression> callee);
82 std::unique_ptr<AST::Expression> primary();
83 std::unique_ptr<AST::StructDecl> structDecl();
84 std::unique_ptr<AST::StructInstanceExpr> structInstance();
85 std::unique_ptr<AST::Expression> fieldAccess(std::unique_ptr<AST::Expression> object);
86};
87} // namespace Phasor
std::unique_ptr< AST::Expression > finishCall(std::unique_ptr< AST::Expression > callee)
Definition Parser.cpp:767
Parser(const std::vector< Token > &tokens)
Definition Parser.cpp:65
std::unique_ptr< AST::Statement > returnStatement()
Definition Parser.cpp:450
std::unique_ptr< AST::Expression > equality()
Definition Parser.cpp:576
std::unique_ptr< AST::Expression > logicalAnd()
Definition Parser.cpp:559
bool isAtEnd()
Definition Parser.cpp:997
std::filesystem::path sourcePath
Definition Parser.hpp:41
Token previous()
Definition Parser.cpp:983
std::unique_ptr< AST::Expression > unary()
Definition Parser.cpp:679
std::unique_ptr< AST::Expression > factor()
Definition Parser.cpp:648
std::unique_ptr< AST::Statement > ifStatement()
Definition Parser.cpp:321
std::unique_ptr< AST::StructDecl > structDecl()
Definition Parser.cpp:890
std::unique_ptr< AST::Statement > whileStatement()
Definition Parser.cpp:336
std::unique_ptr< AST::Statement > expressionStatement()
Definition Parser.cpp:509
Token consume(Phasor::TokenType type, const std::string &message)
Definition Parser.cpp:1021
std::unique_ptr< AST::Expression > fieldAccess(std::unique_ptr< AST::Expression > object)
Definition Parser.cpp:960
std::vector< Token > tokens
Definition Parser.hpp:37
Token peek()
Definition Parser.cpp:969
std::unique_ptr< AST::TypeNode > parseType()
Definition Parser.cpp:172
std::unique_ptr< AST::Expression > expression()
Definition Parser.cpp:520
std::unique_ptr< AST::Statement > declaration()
Definition Parser.cpp:87
std::unique_ptr< AST::Statement > varDeclaration()
Definition Parser.cpp:195
std::unique_ptr< AST::Expression > assignment()
Definition Parser.cpp:525
Token peekNext()
Definition Parser.cpp:974
std::string currentFunction
Definition Parser.hpp:39
std::unique_ptr< AST::Program > parse()
Definition Parser.cpp:74
std::unique_ptr< AST::Statement > importStatement()
Definition Parser.cpp:492
std::unique_ptr< AST::BlockStmt > block()
Definition Parser.cpp:468
std::unique_ptr< AST::Statement > unsafeStatement()
Definition Parser.cpp:462
bool check(Phasor::TokenType type)
Definition Parser.cpp:1002
std::unique_ptr< AST::Statement > functionDeclaration()
Definition Parser.cpp:132
std::unique_ptr< AST::Statement > exportStatement()
Definition Parser.cpp:502
std::unique_ptr< AST::Statement > switchStatement()
Definition Parser.cpp:386
std::unique_ptr< AST::Expression > comparison()
Definition Parser.cpp:594
std::unique_ptr< AST::Expression > logicalOr()
Definition Parser.cpp:542
std::unique_ptr< AST::Statement > forStatement()
Definition Parser.cpp:345
std::unique_ptr< AST::StructInstanceExpr > structInstance()
Definition Parser.cpp:927
void setSourcePath(const std::filesystem::path &path)
Definition Parser.hpp:18
std::optional< Error > getError() const
Definition Parser.hpp:31
std::unique_ptr< AST::Statement > printStatement()
Definition Parser.cpp:484
std::unique_ptr< AST::Statement > statement()
Definition Parser.cpp:210
bool match(Phasor::TokenType type)
Definition Parser.cpp:1011
std::unique_ptr< AST::Expression > primary()
Definition Parser.cpp:803
std::unique_ptr< AST::Expression > term()
Definition Parser.cpp:630
std::optional< Error > lastError
Definition Parser.hpp:40
Token expect(Phasor::TokenType type, const std::string &message)
Definition Parser.cpp:1068
Token advance()
Definition Parser.cpp:988
std::unique_ptr< AST::Expression > call()
Definition Parser.cpp:712
The Phasor Programming Language and Runtime.
Definition AST.hpp:12
TokenType
Token types for the lexer.
Definition AST.hpp:15
std::string message
Definition Parser.hpp:27
Token structure.
Definition AST.hpp:26