Gyoji Compiler
Loading...
Searching...
No Matches
token-stream.hpp
1#pragma once
2#include <string>
3#include <vector>
4#include <map>
5#include <algorithm>
6#include <gyoji-misc/pointers.hpp>
7#include <gyoji-context/source-reference.hpp>
8
9namespace Gyoji::context {
10 class Token;
11 class TokenStream;
12
13 typedef unsigned int TokenID;
14
41 class Token {
42 public:
49 Token(
50 TokenID _typestr,
51 std::string _value,
52 const std::string & _filename,
53 size_t _line,
54 size_t _column,
55 size_t _length
56 );
60 ~Token();
70 const TokenID & get_type() const;
76 const std::string & get_value() const;
77
78 const SourceReference & get_source_ref() const;
79
80 friend TokenStream;
81 private:
86 void append(std::string & value);
87 TokenID typestr;
88 std::string value;
89 SourceReference src_ref;
90 };
91
107 public:
111 TokenStream();
115 ~TokenStream();
116
123
131
137 std::string get_line(size_t _line) const;
138
145 const Token & add_token(
146 TokenID _typestr,
147 std::string _value,
148 const std::string & _filename,
149 size_t _line,
150 size_t _column
151 );
152
161 std::vector<std::pair<size_t, std::string>> context(size_t line_start, size_t line_end) const;
162
173 void append_token(std::string _value);
174
175 static const SourceReference & get_zero_source_ref();
176
177 private:
178
180 std::map<size_t, std::vector<Token*>> tokens_by_lineno;
181 };
182};
References a location in the source-file.
Definition source-reference.hpp:16
Stream of tokens read by the parser to provide context for errors.
Definition token-stream.hpp:106
std::string get_line(size_t _line) const
Definition token-stream.cpp:42
~TokenStream()
Definition token-stream.cpp:17
const SourceReference & get_current_source_ref() const
Definition token-stream.cpp:33
const std::vector< Gyoji::owned< Token > > & get_tokens() const
Definition token-stream.cpp:21
void append_token(std::string _value)
Definition token-stream.cpp:88
std::vector< std::pair< size_t, std::string > > context(size_t line_start, size_t line_end) const
Definition token-stream.cpp:57
TokenStream()
Definition token-stream.cpp:14
const Token & add_token(TokenID _typestr, std::string _value, const std::string &_filename, size_t _line, size_t _column)
Definition token-stream.cpp:72
Represents a token read from the input stream.
Definition token-stream.hpp:41
const std::string & get_value() const
Definition token-stream.cpp:118
~Token()
Definition token-stream.cpp:108
const TokenID & get_type() const
Definition token-stream.cpp:114
The context namespace deals with objects that should last the entire scope of compilation.
Definition gyoji-context.hpp:16