Porytiles
Loading...
Searching...
No Matches
lexer.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <string>
4
#include <vector>
5
6
#include "gsl/pointers"
7
8
#include "
porytiles/utilities/c_parser/source_position.hpp
"
9
#include "
porytiles/utilities/c_parser/token.hpp
"
10
#include "
porytiles/utilities/result/chainable_result.hpp
"
11
12
namespace
porytiles
{
13
14
class
CParserContext;
15
class
TextFormatter;
16
44
class
Lexer
{
45
public
:
56
Lexer
(gsl::not_null<const TextFormatter *> format, std::string content);
57
69
Lexer
(gsl::not_null<const TextFormatter *> format, std::string content,
const
CParserContext
*context);
70
84
[[nodiscard]]
ChainableResult<std::vector<Token>
>
lex
();
85
86
private
:
87
[[nodiscard]]
char
peek()
const
;
88
[[nodiscard]]
char
peek_next()
const
;
89
char
advance();
90
[[nodiscard]]
bool
is_at_end()
const
;
91
void
skip_whitespace_except_newline();
92
void
skip_line_comment();
93
[[nodiscard]]
ChainableResult<void>
skip_block_comment();
94
95
[[nodiscard]]
Token
consume_identifier_or_keyword();
96
[[nodiscard]]
ChainableResult<Token>
consume_number();
97
[[nodiscard]]
ChainableResult<Token>
consume_string();
98
[[nodiscard]]
Token
consume_operator();
99
100
[[nodiscard]]
SourcePosition
current_position()
const
;
101
[[nodiscard]]
FormattableError
make_error(
SourcePosition
pos, std::string message)
const
;
102
103
const
TextFormatter
*format_;
104
std::string content_;
105
std::size_t current_{0};
106
std::size_t line_{1};
107
std::size_t column_{1};
108
const
CParserContext
*context_{
nullptr
};
109
};
110
111
}
// namespace porytiles
chainable_result.hpp
porytiles::CParserContext
Context object providing rich error formatting for C/C++ parsing.
Definition
c_parser_context.hpp:41
porytiles::ChainableResult
A result type that maintains a chainable sequence of errors for debugging and error reporting.
Definition
chainable_result.hpp:31
porytiles::FormattableError
General-purpose error implementation with formatted message support.
Definition
error.hpp:63
porytiles::Lexer
Lexical analyzer for C/C++ source code.
Definition
lexer.hpp:44
porytiles::Lexer::lex
ChainableResult< std::vector< Token > > lex()
Tokenizes the entire source content.
Definition
lexer.cpp:190
porytiles::TextFormatter
Abstract base class for applying text styling with context-aware formatting.
Definition
text_formatter.hpp:529
porytiles::Token
Represents a lexical token from C source code.
Definition
token.hpp:106
porytiles
Definition
app_config.hpp:12
source_position.hpp
porytiles::SourcePosition
Represents a position within source content.
Definition
source_position.hpp:16
token.hpp
porytiles
include
porytiles
utilities
c_parser
lexer.hpp
Generated by
1.9.8