topazc
lexer.hpp
Go to the documentation of this file.
1
6
7#pragma once
8#include "token.hpp"
9#include <vector>
10#include <map>
11
15class Lexer {
16private:
17 std::string file_name;
18 std::string source;
19 size_t source_len;
20 uint32_t pos;
21 uint32_t line;
22 uint32_t column;
23 std::map<std::string, TokenType> keywords {
24 {"bool", TOK_BOOL},
25 {"char", TOK_CHAR},
26 {"short", TOK_SHORT},
27 {"int", TOK_INT},
28 {"long", TOK_LONG},
29 {"float", TOK_FLOAT},
30 {"double", TOK_DOUBLE},
31 {"noth", TOK_NOTH},
32 {"let", TOK_LET},
33 {"fun", TOK_FUN},
34 {"if", TOK_IF},
35 {"else", TOK_ELSE},
36 {"for", TOK_FOR},
37 {"while", TOK_WHILE},
38 {"do", TOK_DO},
39 {"continue", TOK_CONTINUE},
40 {"break", TOK_BREAK},
41 {"module", TOK_MODULE},
42 {"pub", TOK_PUB},
43 {"priv", TOK_PRIV},
44 {"use", TOK_USE},
45 {"const", TOK_CONST},
46 {"return", TOK_RETURN},
47 {"unsafe", TOK_UNSAFE},
48 {"extern", TOK_EXTERN},
49 };
50 bool is_debug;
51
52public:
53 Lexer(std::string src, std::string fn, bool id) : source(src), source_len(src.length()), pos(0), line(1), column(1), file_name(fn), is_debug(id) {}
54
62 std::vector<Token> tokenize();
63
64private:
75
86
96
107
117
124 void skip_comments();
125
134 const char get_escape_sequence();
135
146 const char peek(int32_t rpos = 0) const;
147
155 const char advance();
156};
std::string file_name
Definition lexer.hpp:17
Token tokenize_character_lit()
Method for tokenizing character literal.
Definition lexer.cpp:138
const char get_escape_sequence()
Method for getting escape-sequence in string or character literal.
Definition lexer.cpp:283
Token tokenize_string_lit()
Method for tokenizing string literal.
Definition lexer.cpp:117
Token tokenize_number_lit()
Method for tokenizing number literal.
Definition lexer.cpp:64
std::string source
Definition lexer.hpp:18
uint32_t line
Definition lexer.hpp:21
bool is_debug
Definition lexer.hpp:50
uint32_t pos
Definition lexer.hpp:20
const char advance()
Method for skipping current character from source code and returns it.
Definition lexer.cpp:324
void skip_comments()
Method for skipping comments.
Definition lexer.cpp:275
uint32_t column
Definition lexer.hpp:22
size_t source_len
Definition lexer.hpp:19
const char peek(int32_t rpos=0) const
Method for getting character from source code by lexer pos and passed offset.
Definition lexer.cpp:315
Token tokenize_op()
Method for tokenizing operator.
Definition lexer.cpp:162
Lexer(std::string src, std::string fn, bool id)
Definition lexer.hpp:53
Token tokenize_id()
Method for tokenizing identifier token.
Definition lexer.cpp:46
std::map< std::string, TokenType > keywords
Definition lexer.hpp:23
std::vector< Token > tokenize()
Method for tokenizing source code.
Definition lexer.cpp:10
Token structure.
Definition token.hpp:92
Header file for defining the token.
@ TOK_BREAK
Definition token.hpp:32
@ TOK_USE
Definition token.hpp:36
@ TOK_LET
Definition token.hpp:24
@ TOK_IF
Definition token.hpp:26
@ TOK_PRIV
Definition token.hpp:35
@ TOK_UNSAFE
Definition token.hpp:39
@ TOK_FOR
Definition token.hpp:28
@ TOK_BOOL
Definition token.hpp:15
@ TOK_DOUBLE
Definition token.hpp:21
@ TOK_DO
Definition token.hpp:29
@ TOK_MODULE
Definition token.hpp:33
@ TOK_WHILE
Definition token.hpp:30
@ TOK_NOTH
Definition token.hpp:22
@ TOK_LONG
Definition token.hpp:19
@ TOK_CHAR
Definition token.hpp:16
@ TOK_CONST
Definition token.hpp:37
@ TOK_SHORT
Definition token.hpp:17
@ TOK_FUN
Definition token.hpp:25
@ TOK_ELSE
Definition token.hpp:27
@ TOK_FLOAT
Definition token.hpp:20
@ TOK_INT
Definition token.hpp:18
@ TOK_PUB
Definition token.hpp:34
@ TOK_EXTERN
Definition token.hpp:40
@ TOK_RETURN
Definition token.hpp:38
@ TOK_CONTINUE
Definition token.hpp:31