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 <vector>
6namespace pulsar
7{
8
9using namespace Phasor::AST;
10using namespace Phasor;
11
13class Parser
14{
15 public:
16 Parser(const std::vector<Token> &tokens);
17 std::unique_ptr<Program> parse();
18
19 private:
20 std::vector<Token> tokens;
21 int current = 0;
22 std::string currentFunction = "";
23
27 bool isAtEnd();
31 bool match(Phasor::TokenType type, std::string lexeme);
32 Token consume(Phasor::TokenType type, std::string message);
33 Token consume(Phasor::TokenType type, std::string lexeme, std::string message);
34 Token expect(Phasor::TokenType type, const std::string &message);
35
36 std::unique_ptr<Statement> declaration();
37 std::unique_ptr<Statement> varDeclaration();
38 std::unique_ptr<Statement> functionDeclaration();
39 std::unique_ptr<Statement> statement();
40 std::unique_ptr<Statement> printStatement();
41 std::unique_ptr<Statement> ifStatement();
42 std::unique_ptr<Statement> whileStatement();
43 std::unique_ptr<Statement> forStatement();
44 std::unique_ptr<Statement> switchStatement();
45 std::unique_ptr<Statement> returnStatement();
46 std::unique_ptr<BlockStmt> block();
47 std::unique_ptr<Statement> expressionStatement();
48 std::unique_ptr<TypeNode> parseType();
49 std::unique_ptr<Expression> expression();
50 std::unique_ptr<Expression> assignment();
51 std::unique_ptr<Expression> logicalOr();
52 std::unique_ptr<Expression> logicalAnd();
53 std::unique_ptr<Expression> equality();
54 std::unique_ptr<Expression> comparison();
55 std::unique_ptr<Expression> term();
56 std::unique_ptr<Expression> factor();
57 std::unique_ptr<Expression> unary();
58 std::unique_ptr<Expression> call();
59 std::unique_ptr<Expression> finishCall(std::unique_ptr<Expression> callee);
60 std::unique_ptr<Expression> primary();
61};
62} // namespace pulsar
std::unique_ptr< AST::Expression > finishCall(std::unique_ptr< AST::Expression > callee)
std::string currentFunction
Definition Parser.hpp:22
Parser(const std::vector< Token > &tokens)
std::unique_ptr< Statement > returnStatement()
std::unique_ptr< Expression > equality()
std::unique_ptr< Expression > logicalAnd()
Token previous()
std::unique_ptr< Expression > unary()
std::unique_ptr< Expression > factor()
std::unique_ptr< Statement > ifStatement()
Token consume(Phasor::TokenType type, std::string message)
bool match(Phasor::TokenType type, std::string lexeme)
std::unique_ptr< Statement > whileStatement()
std::unique_ptr< Statement > expressionStatement()
std::unique_ptr< TypeNode > parseType()
std::unique_ptr< Expression > expression()
std::unique_ptr< Statement > declaration()
std::unique_ptr< Statement > varDeclaration()
std::unique_ptr< Expression > assignment()
Token peekNext()
Token consume(Phasor::TokenType type, std::string lexeme, std::string message)
std::unique_ptr< Program > parse()
std::unique_ptr< BlockStmt > block()
bool check(Phasor::TokenType type)
std::unique_ptr< Statement > functionDeclaration()
std::unique_ptr< Statement > switchStatement()
std::unique_ptr< Expression > comparison()
std::vector< Token > tokens
Definition Parser.hpp:20
std::unique_ptr< Expression > logicalOr()
std::unique_ptr< Statement > forStatement()
std::unique_ptr< Statement > printStatement()
std::unique_ptr< Statement > statement()
bool match(Phasor::TokenType type)
std::unique_ptr< Expression > primary()
std::unique_ptr< Expression > term()
Token expect(Phasor::TokenType type, const std::string &message)
std::unique_ptr< Expression > call()
Abstract Syntax Tree (AST) namespace.
Definition AST.hpp:34
TokenType
Token types for the lexer.
Definition AST.hpp:14
The Pulsar Scripting Language.
Definition Compiler.cpp:13
Token structure.
Definition AST.hpp:25