Phasor 3.1.1
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, const std::filesystem::path &sourcePath);
17
18 inline 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 std::optional<Error> getError() const
32 {
33 return lastError;
34 }
35 private:
36 std::vector<Token> tokens;
37 int current = 0;
38 std::string currentFunction = "";
39 std::optional<Error> lastError;
40 std::filesystem::path sourcePath;
41
42 Token peek();
44 Token advance();
45 bool isAtEnd();
46 bool check(Phasor::TokenType type);
48 bool match(Phasor::TokenType type);
49 bool match(Phasor::TokenType type, std::string lexeme);
50 Token consume(Phasor::TokenType type, std::string message);
51 Token consume(Phasor::TokenType type, std::string lexeme, std::string message);
52 Token expect(Phasor::TokenType type, const std::string &message);
53
54 std::unique_ptr<AST::Statement> declaration();
55 std::unique_ptr<AST::Statement> varDeclaration();
56 std::unique_ptr<AST::Statement> functionDeclaration();
57 std::unique_ptr<AST::Statement> statement();
58 std::unique_ptr<AST::Statement> printStatement();
59 std::unique_ptr<AST::Statement> ifStatement();
60 std::unique_ptr<AST::Statement> whileStatement();
61 std::unique_ptr<AST::Statement> forStatement();
62 std::unique_ptr<AST::Statement> switchStatement();
63 std::unique_ptr<AST::Statement> returnStatement();
64 std::unique_ptr<AST::Statement> unsafeStatement();
65 std::unique_ptr<AST::BlockStmt> block();
66 std::unique_ptr<AST::Statement> importStatement();
67 std::unique_ptr<AST::Statement> exportStatement();
68 std::unique_ptr<AST::Statement> expressionStatement();
69 std::unique_ptr<AST::TypeNode> parseType();
70 std::unique_ptr<AST::Expression> expression();
71 std::unique_ptr<AST::Expression> assignment();
72 std::unique_ptr<AST::Expression> logicalOr();
73 std::unique_ptr<AST::Expression> logicalAnd();
74 std::unique_ptr<AST::Expression> equality();
75 std::unique_ptr<AST::Expression> comparison();
76 std::unique_ptr<AST::Expression> term();
77 std::unique_ptr<AST::Expression> factor();
78 std::unique_ptr<AST::Expression> unary();
79 std::unique_ptr<AST::Expression> call();
80 std::unique_ptr<AST::Expression> finishCall(std::unique_ptr<AST::Expression> callee);
81 std::unique_ptr<AST::Expression> primary();
82 std::unique_ptr<AST::StructDecl> structDecl();
83 std::unique_ptr<AST::StructInstanceExpr> structInstance();
84 std::unique_ptr<AST::Expression> fieldAccess(std::unique_ptr<AST::Expression> object);
85};
86} // namespace Phasor
Parser(const std::vector< Token > &tokens)
Definition Parser.cpp:65
std::unique_ptr< AST::Statement > returnStatement()
Definition Parser.cpp:449
std::unique_ptr< AST::Expression > equality()
Definition Parser.cpp:575
std::unique_ptr< AST::Expression > logicalAnd()
Definition Parser.cpp:558
bool isAtEnd()
Definition Parser.cpp:980
std::filesystem::path sourcePath
Definition Parser.hpp:40
Token previous()
Definition Parser.cpp:968
std::unique_ptr< AST::Expression > unary()
Definition Parser.cpp:664
std::unique_ptr< AST::Expression > factor()
Definition Parser.cpp:639
std::unique_ptr< AST::Statement > ifStatement()
Definition Parser.cpp:320
Token consume(Phasor::TokenType type, std::string message)
Definition Parser.cpp:1002
std::unique_ptr< AST::StructDecl > structDecl()
Definition Parser.cpp:875
std::unique_ptr< AST::Statement > whileStatement()
Definition Parser.cpp:335
std::unique_ptr< AST::Statement > expressionStatement()
Definition Parser.cpp:508
std::unique_ptr< AST::Expression > fieldAccess(std::unique_ptr< AST::Expression > object)
Definition Parser.cpp:945
std::vector< Token > tokens
Definition Parser.hpp:36
Token peek()
Definition Parser.cpp:954
std::unique_ptr< AST::TypeNode > parseType()
Definition Parser.cpp:171
std::unique_ptr< AST::Expression > expression()
Definition Parser.cpp:519
std::unique_ptr< AST::Statement > declaration()
Definition Parser.cpp:86
std::unique_ptr< AST::Statement > varDeclaration()
Definition Parser.cpp:194
std::unique_ptr< AST::Expression > assignment()
Definition Parser.cpp:524
Token peekNext()
Definition Parser.cpp:959
std::string currentFunction
Definition Parser.hpp:38
std::unique_ptr< AST::Program > parse()
Definition Parser.cpp:73
std::unique_ptr< AST::Statement > importStatement()
Definition Parser.cpp:491
std::unique_ptr< AST::BlockStmt > block()
Definition Parser.cpp:467
std::unique_ptr< AST::Statement > unsafeStatement()
Definition Parser.cpp:461
bool check(Phasor::TokenType type)
Definition Parser.cpp:985
std::unique_ptr< AST::Statement > functionDeclaration()
Definition Parser.cpp:131
std::unique_ptr< AST::Statement > exportStatement()
Definition Parser.cpp:501
std::unique_ptr< AST::Statement > switchStatement()
Definition Parser.cpp:385
std::unique_ptr< AST::Expression > comparison()
Definition Parser.cpp:593
std::unique_ptr< AST::Expression > finishCall(std::unique_ptr< AST::Expression > callee)
std::unique_ptr< AST::Expression > logicalOr()
Definition Parser.cpp:541
std::unique_ptr< AST::Statement > forStatement()
Definition Parser.cpp:344
std::unique_ptr< AST::StructInstanceExpr > structInstance()
Definition Parser.cpp:912
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:483
std::unique_ptr< AST::Statement > statement()
Definition Parser.cpp:209
bool match(Phasor::TokenType type)
Definition Parser.cpp:992
std::unique_ptr< AST::Expression > primary()
Definition Parser.cpp:788
std::unique_ptr< AST::Expression > term()
Definition Parser.cpp:621
std::optional< Error > lastError
Definition Parser.hpp:39
Token expect(Phasor::TokenType type, const std::string &message)
Definition Parser.cpp:1043
Token advance()
Definition Parser.cpp:973
std::unique_ptr< AST::Expression > call()
Definition Parser.cpp:697
The Phasor Programming Language and Runtime.
Definition AST.hpp:11
TokenType
Token types for the lexer.
Definition AST.hpp:14
std::string message
Definition Parser.hpp:27
Token structure.
Definition AST.hpp:25