Files
dlang-sqlite/dlang.sqlite/dlang/parser.hpp
T
2026-10-12 23:24:32 +02:00

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