Phasor 2.2.0
Stack VM based Programming Language
Loading...
Searching...
No Matches
Parser.hpp
Go to the documentation of this file.
1#pragma once
2#include "../../AST/AST.hpp"
3#include "../Lexer/Lexer.hpp"
4#include <memory>
5#include <vector>
6
7namespace Phasor
8{
9
11class Parser
12{
13 public:
14 Parser(const std::vector<Token> &tokens);
15 std::unique_ptr<AST::Program> parse();
16
17 private:
18 std::vector<Token> tokens;
19 int current = 0;
20 std::string currentFunction = "";
21
22 Token peek();
24 Token advance();
25 bool isAtEnd();
26 bool check(TokenType type);
28 bool match(TokenType type);
29 bool match(TokenType type, std::string lexeme);
30 Token consume(TokenType type, std::string message);
31 Token consume(TokenType type, std::string lexeme, std::string message);
32 Token expect(TokenType type, const std::string &message);
33
34 std::unique_ptr<AST::Statement> declaration();
35 std::unique_ptr<AST::Statement> varDeclaration();
36 std::unique_ptr<AST::Statement> functionDeclaration();
37 std::unique_ptr<AST::Statement> statement();
38 std::unique_ptr<AST::Statement> printStatement();
39 std::unique_ptr<AST::Statement> readLineStatement();
40 std::unique_ptr<AST::Statement> ifStatement();
41 std::unique_ptr<AST::Statement> whileStatement();
42 std::unique_ptr<AST::Statement> forStatement();
43 std::unique_ptr<AST::Statement> switchStatement();
44 std::unique_ptr<AST::Statement> returnStatement();
45 std::unique_ptr<AST::Statement> unsafeStatement();
46 std::unique_ptr<AST::BlockStmt> block();
47 std::unique_ptr<AST::Statement> importStatement();
48 std::unique_ptr<AST::Statement> exportStatement();
49 std::unique_ptr<AST::Statement> expressionStatement();
50 std::unique_ptr<AST::TypeNode> parseType();
51 std::unique_ptr<AST::Expression> expression();
52 std::unique_ptr<AST::Expression> assignment();
53 std::unique_ptr<AST::Expression> logicalOr();
54 std::unique_ptr<AST::Expression> logicalAnd();
55 std::unique_ptr<AST::Expression> equality();
56 std::unique_ptr<AST::Expression> comparison();
57 std::unique_ptr<AST::Expression> term();
58 std::unique_ptr<AST::Expression> factor();
59 std::unique_ptr<AST::Expression> unary();
60 std::unique_ptr<AST::Expression> call();
61 std::unique_ptr<AST::Expression> finishCall(std::unique_ptr<AST::Expression> callee);
62 std::unique_ptr<AST::Expression> primary();
63 std::unique_ptr<AST::StructDecl> structDecl();
64 std::unique_ptr<AST::StructInstanceExpr> structInstance();
65 std::unique_ptr<AST::Expression> fieldAccess(std::unique_ptr<AST::Expression> object);
66};
67} // namespace Phasor
std::unique_ptr< AST::Statement > varDeclaration()
Definition Parser.cpp:107
std::unique_ptr< AST::Statement > expressionStatement()
Definition Parser.cpp:344
std::unique_ptr< AST::Expression > expression()
Definition Parser.cpp:351
Token peekNext()
Definition Parser.cpp:690
std::unique_ptr< AST::Statement > ifStatement()
Definition Parser.cpp:177
std::unique_ptr< AST::Statement > printStatement()
Definition Parser.cpp:325
std::unique_ptr< AST::Statement > switchStatement()
Definition Parser.cpp:241
std::unique_ptr< AST::Expression > logicalAnd()
Definition Parser.cpp:383
Token advance()
Definition Parser.cpp:704
std::unique_ptr< AST::Expression > primary()
Definition Parser.cpp:564
std::unique_ptr< AST::Statement > statement()
Definition Parser.cpp:119
std::unique_ptr< AST::BlockStmt > block()
Definition Parser.cpp:312
std::unique_ptr< AST::StructDecl > structDecl()
Definition Parser.cpp:621
std::unique_ptr< AST::Expression > fieldAccess(std::unique_ptr< AST::Expression > object)
Definition Parser.cpp:679
std::vector< Token > tokens
Definition Parser.hpp:18
std::unique_ptr< AST::Statement > returnStatement()
Definition Parser.cpp:295
Token previous()
Definition Parser.cpp:699
std::unique_ptr< AST::Program > parse()
Definition Parser.cpp:13
std::unique_ptr< AST::Statement > readLineStatement()
std::unique_ptr< AST::Statement > whileStatement()
Definition Parser.cpp:191
std::unique_ptr< AST::Expression > assignment()
Definition Parser.cpp:356
bool match(TokenType type)
Definition Parser.cpp:723
std::unique_ptr< AST::Expression > call()
Definition Parser.cpp:498
std::unique_ptr< AST::Statement > declaration()
Definition Parser.cpp:23
std::string currentFunction
Definition Parser.hpp:20
Parser(const std::vector< Token > &tokens)
Definition Parser.cpp:9
std::unique_ptr< AST::Statement > importStatement()
Definition Parser.cpp:332
std::unique_ptr< AST::Expression > term()
Definition Parser.cpp:437
Token expect(TokenType type, const std::string &message)
Definition Parser.cpp:773
std::unique_ptr< AST::Statement > unsafeStatement()
Definition Parser.cpp:306
std::unique_ptr< AST::Expression > logicalOr()
Definition Parser.cpp:369
std::unique_ptr< AST::Statement > exportStatement()
Definition Parser.cpp:339
bool check(TokenType type)
Definition Parser.cpp:716
std::unique_ptr< AST::Statement > functionDeclaration()
Definition Parser.cpp:52
std::unique_ptr< AST::Statement > forStatement()
Definition Parser.cpp:200
std::unique_ptr< AST::Expression > equality()
Definition Parser.cpp:397
bool isAtEnd()
Definition Parser.cpp:711
std::unique_ptr< AST::Expression > comparison()
Definition Parser.cpp:412
std::unique_ptr< AST::TypeNode > parseType()
Definition Parser.cpp:89
std::unique_ptr< AST::StructInstanceExpr > structInstance()
Definition Parser.cpp:651
std::unique_ptr< AST::Expression > unary()
Definition Parser.cpp:474
Token consume(TokenType type, std::string message)
Definition Parser.cpp:733
std::unique_ptr< AST::Expression > finishCall(std::unique_ptr< AST::Expression > callee)
Definition Parser.cpp:535
std::unique_ptr< AST::Expression > factor()
Definition Parser.cpp:452
Token peek()
Definition Parser.cpp:685
The Phasor Programming Language and Runtime.
Definition AST.hpp:8
TokenType
Definition Lexer.hpp:10