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
11
12namespace porytiles {
13
14class CParserContext;
15class TextFormatter;
16
44class 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
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
Context object providing rich error formatting for C/C++ parsing.
A result type that maintains a chainable sequence of errors for debugging and error reporting.
General-purpose error implementation with formatted message support.
Definition error.hpp:63
Lexical analyzer for C/C++ source code.
Definition lexer.hpp:44
ChainableResult< std::vector< Token > > lex()
Tokenizes the entire source content.
Definition lexer.cpp:190
Abstract base class for applying text styling with context-aware formatting.
Represents a lexical token from C source code.
Definition token.hpp:106
Represents a position within source content.