mini-llvm 0.1.0
Loading...
Searching...
No Matches
Parser.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <exception>
6#include <memory>
7#include <optional>
8#include <string>
9#include <utility>
10#include <vector>
11
17#include "mini-llvm/ir/Module.h"
18#include "mini-llvm/ir/Type.h"
19#include "mini-llvm/ir/Value.h"
23
24namespace mini_llvm::ir {
25
26class ParseException : public std::exception {
27public:
28 ParseException(std::string message, std::vector<Token>::const_iterator location)
29 : message_(std::move(message)), location_(location) {}
30
31 const std::string &message() const & {
32 return message_;
33 }
34
35 std::string &&message() && {
36 return std::move(message_);
37 }
38
39 std::vector<Token>::const_iterator location() const {
40 return location_;
41 }
42
43 const char *what() const noexcept override {
44 return "ParseException";
45 }
46
47private:
48 std::string message_;
49 std::vector<Token>::const_iterator location_;
50};
51
53public:
54 explicit Parser(std::vector<Token>::const_iterator current);
55
57
58 Parser(Parser &&) noexcept;
59 Parser &operator=(Parser &&) noexcept;
60
62 std::shared_ptr<GlobalVar> parseGlobalVarHeader(bool &isDeclaration);
64 std::shared_ptr<Function> parseFunctionHeader(bool &isDeclaration);
67 std::shared_ptr<Instruction> parseInstruction();
68 std::shared_ptr<Value> parseValue(const Type &type);
69 std::shared_ptr<Value> parseIdentifier(const Type &type);
70 std::shared_ptr<Constant> parseConstant(const Type &type);
71 std::unique_ptr<Type> parseType();
72 Symbol parseSymbol(std::optional<Symbol::Scope> scope = std::nullopt);
73
74private:
75 class Impl;
76
77 std::unique_ptr<Impl> impl_;
78};
79
80MINI_LLVM_EXPORT Module parseModule(const std::vector<Token> &tokens);
81
82} // namespace mini_llvm::ir
#define MINI_LLVM_EXPORT
Definition Compiler.h:17
Definition BasicBlock.h:28
Definition Constant.h:13
Definition Function.h:34
Definition GlobalVar.h:20
Definition Instruction.h:22
Definition Module.h:22
const std::string & message() const &
Definition Parser.h:31
std::string && message() &&
Definition Parser.h:35
ParseException(std::string message, std::vector< Token >::const_iterator location)
Definition Parser.h:28
std::vector< Token >::const_iterator location() const
Definition Parser.h:39
const char * what() const noexcept override
Definition Parser.h:43
void parseGlobalVarInitializer(GlobalVar &G)
std::shared_ptr< Instruction > parseInstruction()
Parser(Parser &&) noexcept
void parseFunctionBody(Function &F)
std::unique_ptr< Type > parseType()
std::shared_ptr< Function > parseFunctionHeader(bool &isDeclaration)
std::shared_ptr< GlobalVar > parseGlobalVarHeader(bool &isDeclaration)
std::shared_ptr< Constant > parseConstant(const Type &type)
Symbol parseSymbol(std::optional< Symbol::Scope > scope=std::nullopt)
void parseBasicBlock(BasicBlock &B)
std::shared_ptr< Value > parseValue(const Type &type)
std::shared_ptr< Value > parseIdentifier(const Type &type)
Parser(std::vector< Token >::const_iterator current)
Definition Type.h:18
Definition Value.h:24
Definition Argument.h:13
MINI_LLVM_EXPORT std::optional< Module > parseModule(const char *source)
Definition Symbol.h:13
Definition Token.h:15