60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
#ifndef DLANG_PARSER_HPP
|
|
#define DLANG_PARSER_HPP
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "types/include.hpp"
|
|
#include "program.hpp"
|
|
|
|
#include "parser/expressions.hpp"
|
|
#include "parser/statements.hpp"
|
|
|
|
#include "language.hpp"
|
|
|
|
class Parser
|
|
{
|
|
private:
|
|
std::vector<Token> _tokens;
|
|
size_t _pos = 0;
|
|
|
|
private:
|
|
Token& Current();
|
|
Token& Consume();
|
|
Token& Peek(size_t offset = 1);
|
|
bool Match(TokenType type, const std::string& value);
|
|
Token& ShouldBe(TokenType type, const std::string& value = "");
|
|
bool Match(TokenType type, char value);
|
|
Token& ShouldBe(TokenType type, char value);
|
|
|
|
public:
|
|
Parser(const std::vector<Token>& tokens);
|
|
Program ParseProgram();
|
|
|
|
private:
|
|
std::unique_ptr<Statement> ParseStatement();
|
|
std::unique_ptr<Statement> ParseVariableDeclaration();
|
|
std::unique_ptr<Statement> ParseAssignment();
|
|
std::unique_ptr<Statement> ParseWhileDeclaration();
|
|
std::unique_ptr<Statement> ParseForDeclaration();
|
|
std::unique_ptr<Statement> ParseForeachDeclaration();
|
|
std::unique_ptr<Statement> ParseIfDeclaration();
|
|
std::unique_ptr<Statement> ParseFunctionDeclaration();
|
|
std::unique_ptr<Statement> ParseReturnStatement();
|
|
std::unique_ptr<Statement> ParseIncludeStatement();
|
|
|
|
std::unique_ptr<Expression> ParseFunctionCall(std::unique_ptr<Expression> callee);
|
|
std::unique_ptr<Expression> ParseExpression();
|
|
std::unique_ptr<Expression> ParsePrimary();
|
|
std::unique_ptr<Expression> ParseMultiplicative();
|
|
std::unique_ptr<Expression> ParseAdditive();
|
|
std::unique_ptr<Expression> ParseComparison();
|
|
std::unique_ptr<Expression> ParseTableLiteral();
|
|
std::unique_ptr<Expression> ParseListLiteral();
|
|
std::unique_ptr<Expression> ParseLogicalAndOr();
|
|
std::unique_ptr<Expression> ParseFunctionExpression();
|
|
std::unique_ptr<Expression> ParseSizeExpression();
|
|
};
|
|
|
|
#endif |