Derleyici Tasarımı
Yüklüyor...
Arıyor...
Eşleşme Yok
tokenizer.h
Bu dosyanın dokümantasyonuna git.
1
6#ifndef TOKENIZER_H
7#define TOKENIZER_H
8
9
10#include "lexer.h"
11
12#include "map.h"
13
14#include <stddef.h>
15#include <stdint.h>
16
17
19static const size_t TK_NOTOKEN = INT16_MAX - 1;
20
22static const size_t TK_INT = INT16_MAX - 2;
23
25static const size_t TK_FLOAT = INT16_MAX - 3;
26
28static const size_t TK_IDENT = INT16_MAX - 4;
29
30
33struct tokenizer {
35 struct map ident_map;
37 size_t last_id;
38
40 struct map keywords;
43
46};
48
51union seminfo {
53 double num_float;
55 intmax_t num_int;
57 size_t ident_id;
58};
59
61struct token {
64
66 size_t id;
67};
69
70
73
76
79 const char *keyword, size_t id);
80
83 const char *punctuation, size_t id);
84
91 const char *ident, size_t ident_len);
92
94size_t tokenizer_ident_id(struct tokenizer *tokenizer, const char *ident);
95
99
101struct token tokenizer_next(struct tokenizer *tokenzier);
103
104
105#endif
Lexer
Basit hashmap.
Ham lexer çıktısı.
Definition lexer.h:21
map.
Definition map.h:18
Token.
Definition tokenizer.h:61
size_t id
Token tipini ifade eden özgün ID.
Definition tokenizer.h:66
tokenizer.
Definition tokenizer.h:33
struct lexeme current_lexeme
İşlenmekte olan lexeme.
Definition tokenizer.h:45
size_t last_id
Identifier'lara eşsiz ID'ler ataybilmek için yardımcı sayaç.
Definition tokenizer.h:37
struct map punctuations
Yazılım dilindeki punctuation'lar (sembol ve operatörler).
Definition tokenizer.h:42
struct map ident_map
Identifier'a karşılık atanan sayısal ID.
Definition tokenizer.h:35
struct map keywords
Yazılım dilindeki keyword'ler.
Definition tokenizer.h:40
void tokenizer_destroy(struct tokenizer *tokenizer)
Tokenizerın tahsis ettiği belleği temizler.
void tokenizer_add_keyword(struct tokenizer *tokenizer, const char *keyword, size_t id)
Tokenizera bir keyword kaydeder.
size_t tokenizer_ident_id2(struct tokenizer *tokenizer, const char *ident, size_t ident_len)
Identifier'a ait ID'yi döner.
void tokenizer_add_punctuation(struct tokenizer *tokenizer, const char *punctuation, size_t id)
Tokenizera bir punctuation kaydeder..
static const size_t TK_FLOAT
Ondalık sayı token ID'si.
Definition tokenizer.h:25
static const size_t TK_NOTOKEN
tokenizer_feed() ile verilen lexemenin bittiğini belirtir.
Definition tokenizer.h:19
size_t tokenizer_ident_id(struct tokenizer *tokenizer, const char *ident)
Identifier'a ait ID'yi döner.
void tokenizer_init(struct tokenizer *tokenizer)
[Token tanımı]
static const size_t TK_IDENT
Identifier token ID'si.
Definition tokenizer.h:28
static const size_t TK_INT
Tam sayı token ID'si.
Definition tokenizer.h:22
void tokenizer_feed(struct tokenizer *tokenizer, struct lexeme lexeme)
Lexemeyi tokenizere gönderir.
struct token tokenizer_next(struct tokenizer *tokenzier)
Sıradaki tokeni çek.
[Tokenizer tanımı]
Definition tokenizer.h:51
size_t ident_id
TK_IDENT tipi için seminfo.
Definition tokenizer.h:57
intmax_t num_int
TK_INT tipi için seminfo.
Definition tokenizer.h:55
double num_float
TK_FLOAT tipi için seminfo.
Definition tokenizer.h:53