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
42class Lexer {
43 public:
52 Lexer(gsl::not_null<const TextFormatter *> format, std::string content);
53
63 Lexer(gsl::not_null<const TextFormatter *> format, std::string content, const CParserContext *context);
64
77
78 private:
79 [[nodiscard]] char peek() const;
80 [[nodiscard]] char peek_next() const;
81 char advance();
82 [[nodiscard]] bool is_at_end() const;
83 void skip_whitespace_except_newline();
84 void skip_line_comment();
85 [[nodiscard]] ChainableResult<void> skip_block_comment();
86
87 [[nodiscard]] Token consume_identifier_or_keyword();
88 [[nodiscard]] ChainableResult<Token> consume_number();
89 [[nodiscard]] ChainableResult<Token> consume_string();
90 [[nodiscard]] Token consume_operator();
91
92 [[nodiscard]] SourcePosition current_position() const;
93 [[nodiscard]] FormattableError make_error(SourcePosition pos, std::string message) const;
94
95 const TextFormatter *format_;
96 std::string content_;
97 std::size_t current_{0};
98 std::size_t line_{1};
99 std::size_t column_{1};
100 const CParserContext *context_{nullptr};
101};
102
103} // 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:57
Lexical analyzer for C/C++ source code.
Definition lexer.hpp:42
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:100
Represents a position within source content.