Luma 0.1.0
A low-level compiled alternative to C, C++, and more!
Loading...
Searching...
No Matches
lexer.h
Go to the documentation of this file.
1
10#pragma once
11
12#include "../c_libs/memory/memory.h"
13#include <stdint.h>
14
19typedef enum {
29 // Primitive Types
39 // Keywords
73
74 // prepocessor directives
75 TOK_MODULE,
80 // function attibutes
86 // Symbols
132 TOK_DOCUMENT // You already have this one
134
139typedef struct {
141 const char *src;
142 const char *current;
143 int line;
144 int col;
145} Lexer;
146
151typedef struct {
153 const char *value;
154 int line;
155 int col;
156 int length;
158} Token;
159
164typedef struct {
165 const char *text;
168
173typedef struct {
174 const char *text;
177
190void report_lexer_error(Lexer *lx, const char *error_type, const char *file,
191 const char *msg, const char *line_text, int line,
192 int col, int tk_length);
193
201const char *get_line_text_from_source(const char *source, int target_line);
202
210void init_lexer(Lexer *lexer, const char *source, ArenaAllocator *arena);
211
218Token next_token(Lexer *lexer);
void report_lexer_error(Lexer *lx, const char *error_type, const char *file, const char *msg, const char *line_text, int line, int col, int tk_length)
Reports a lexer error by adding an error to the global error list.
Definition lexer.c:117
Token next_token(Lexer *lexer)
Returns the next token parsed from the source code.
Definition lexer.c:365
const char * get_line_text_from_source(const char *source, int target_line)
Retrieves the text of a specific line from the source code.
Definition lexer.c:142
LumaTokenType
Enumeration of all possible token types recognized by the lexer.
Definition lexer.h:19
@ TOK_DLL_IMPORT
Definition lexer.h:83
@ TOK_ELLIPSIS
Definition lexer.h:126
@ TOK_BREAK
Definition lexer.h:45
@ TOK_LPAREN
Definition lexer.h:88
@ TOK_ALLOC
Definition lexer.h:61
@ TOK_SHIFT_RIGHT
Definition lexer.h:122
@ TOK_LE
Definition lexer.h:105
@ TOK_SIZE_OF
Definition lexer.h:64
@ TOK_IDENTIFIER
Definition lexer.h:22
@ TOK_KEYWORD
Definition lexer.h:23
@ TOK_WHITESPACE
Definition lexer.h:128
@ TOK_USE
Definition lexer.h:76
@ TOK_ERROR
Definition lexer.h:21
@ TOK_SLASH
Definition lexer.h:102
@ TOK_RBRACKET
Definition lexer.h:93
@ TOK_IF
Definition lexer.h:40
@ TOK_RESOLVE
Definition lexer.h:115
@ TOK_ELIF
Definition lexer.h:41
@ TOK_COLON
Definition lexer.h:116
@ TOK_GT
Definition lexer.h:104
@ TOK_DOC_COMMENT
Definition lexer.h:130
@ TOK_LBRACE
Definition lexer.h:90
@ TOK_PLUS
Definition lexer.h:99
@ TOK_STRUCT
Definition lexer.h:47
@ TOK_PUBLIC
Definition lexer.h:53
@ TOK_EQEQ
Definition lexer.h:107
@ TOK_MINUSMINUS
Definition lexer.h:120
@ TOK_FREE
Definition lexer.h:62
@ TOK_SYSTEM
Definition lexer.h:69
@ TOK_CAST
Definition lexer.h:63
@ TOK_SHIFT_LEFT
Definition lexer.h:121
@ TOK_IMPL
Definition lexer.h:70
@ TOK_SWITCH
Definition lexer.h:68
@ TOK_LINK
Definition lexer.h:78
@ TOK_LEFT_ARROW
Definition lexer.h:125
@ TOK_EQUAL
Definition lexer.h:98
@ TOK_COMMA
Definition lexer.h:95
@ TOK_GE
Definition lexer.h:106
@ TOK_PRINTLN
Definition lexer.h:59
@ TOK_STRING
Definition lexer.h:26
@ TOK_TAKES_OWNERSHIP
Definition lexer.h:82
@ TOK_FALSE
Definition lexer.h:52
@ TOK_RIGHT_ARROW
Definition lexer.h:124
@ TOK_RETURNES_OWNERSHIP
Definition lexer.h:81
@ TOK_OR
Definition lexer.h:114
@ TOK_DOT
Definition lexer.h:96
@ TOK_INPUT
Definition lexer.h:60
@ TOK_OS
Definition lexer.h:77
@ TOK_AS
Definition lexer.h:65
@ TOK_TRUE
Definition lexer.h:51
@ TOK_DEFER
Definition lexer.h:66
@ TOK_BOOL
Definition lexer.h:34
@ TOK_PIPE
Definition lexer.h:110
@ TOK_LT
Definition lexer.h:103
@ TOK_STRINGT
Definition lexer.h:35
@ TOK_DOUBLE
Definition lexer.h:31
@ TOK_BANG
Definition lexer.h:117
@ TOK_AT
Definition lexer.h:97
@ TOK_RPAREN
Definition lexer.h:89
@ TOK_CHAR_LITERAL
Definition lexer.h:27
@ TOK_LOOP
Definition lexer.h:43
@ TOK_LIB_IMPORT
Definition lexer.h:84
@ TOK_TILDE
Definition lexer.h:112
@ TOK_RANGE
Definition lexer.h:123
@ TOK_NUM_FLOAT
Definition lexer.h:25
@ TOK_MODL
Definition lexer.h:127
@ TOK_NEQ
Definition lexer.h:108
@ TOK_CHAR
Definition lexer.h:37
@ TOK_SYSCALL
Definition lexer.h:71
@ TOK_CARET
Definition lexer.h:111
@ TOK_RBRACE
Definition lexer.h:91
@ TOK_CONST
Definition lexer.h:56
@ TOK_PRIVATE
Definition lexer.h:54
@ TOK_NUMBER
Definition lexer.h:24
@ TOK_MINUS
Definition lexer.h:100
@ TOK_STATIC
Definition lexer.h:72
@ TOK_PRINT
Definition lexer.h:58
@ TOK_VAR
Definition lexer.h:55
@ TOK_STAR
Definition lexer.h:101
@ TOK_ELSE
Definition lexer.h:42
@ TOK_FLOAT
Definition lexer.h:33
@ TOK_AND
Definition lexer.h:113
@ TOK_VOID
Definition lexer.h:36
@ TOK_INT
Definition lexer.h:30
@ TOK_DOCUMENT
Definition lexer.h:132
@ TOK_FN
Definition lexer.h:57
@ TOK_IN
Definition lexer.h:67
@ TOK_UINT
Definition lexer.h:32
@ TOK_PLUSPLUS
Definition lexer.h:119
@ TOK_SEMICOLON
Definition lexer.h:94
@ TOK_IMPORT
Definition lexer.h:50
@ TOK_MOD
Definition lexer.h:49
@ TOK_EOF
Definition lexer.h:20
@ TOK_AMP
Definition lexer.h:109
@ TOK_ENUM
Definition lexer.h:48
@ TOK_LBRACKET
Definition lexer.h:92
@ TOK_COMMENT
Definition lexer.h:129
@ TOK_QUESTION
Definition lexer.h:118
@ TOK_SYMBOL
Definition lexer.h:87
@ TOK_MODULE_DOC
Definition lexer.h:131
@ TOK_RETURN
Definition lexer.h:44
@ TOK_CONTINUE
Definition lexer.h:46
void init_lexer(Lexer *lexer, const char *source, ArenaAllocator *arena)
Initializes the lexer with source code and memory arena.
Definition lexer.c:228
Arena allocator structure.
Definition memory.h:101
Maps keyword text to token type for quick lookup.
Definition lexer.h:173
LumaTokenType type
Definition lexer.h:175
const char * text
Definition lexer.h:174
Lexer state object for scanning source code.
Definition lexer.h:139
const char * src
Definition lexer.h:141
int line
Definition lexer.h:143
const char * current
Definition lexer.h:142
int col
Definition lexer.h:144
ArenaAllocator * arena
Definition lexer.h:140
Maps symbol text to token type for quick lookup.
Definition lexer.h:164
const char * text
Definition lexer.h:165
LumaTokenType type
Definition lexer.h:166
Represents a single token extracted by the lexer.
Definition lexer.h:151
const char * value
Definition lexer.h:153
LumaTokenType type_
Definition lexer.h:152
int line
Definition lexer.h:154
int whitespace_len
Definition lexer.h:157
int length
Definition lexer.h:156
int col
Definition lexer.h:155