mirror of
https://github.com/lisk77/lambda.git
synced 2025-10-24 02:08:49 +00:00
31 lines
792 B
C++
31 lines
792 B
C++
#ifndef PARSER_HPP
|
|
#define PARSER_HPP
|
|
|
|
#include <vector>
|
|
#include <unordered_map>
|
|
|
|
#include "token.hpp"
|
|
#include "ast.hpp"
|
|
|
|
class Parser {
|
|
std::vector<Token> tokens;
|
|
size_t position;
|
|
bool error_flag;
|
|
std::unordered_map<std::string, std::unique_ptr<Expr>> defs;
|
|
|
|
public:
|
|
Parser(std::vector<Token>);
|
|
const std::unordered_map<std::string, std::unique_ptr<Expr>>& definitions() const;
|
|
const Token& peek() const;
|
|
const Token& get();
|
|
bool accept(TokenType t);
|
|
void expect(TokenType t);
|
|
bool tryParseDefinition();
|
|
std::unique_ptr<Expr> parseSimple();
|
|
std::unique_ptr<Expr> parseApplication();
|
|
std::unique_ptr<Expr> parseTerm();
|
|
std::unique_ptr<Expr> parse();
|
|
std::vector<std::unique_ptr<Expr>> parseProgram();
|
|
};
|
|
|
|
#endif // PARSER_HPP
|