aboutsummaryrefslogtreecommitdiff
path: root/src/include/lexer.h
blob: 28d0e6f9bef2a97f2116e798c74f1d346c454370 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef LEXER_H
#define LEXER_H

#include "token.h"

#define LEXER_VALID (lexer->c != '\0' && lexer->i < strlen(lexer->content))


/* the lexer struct */
typedef struct LEXER_STRUC {
   /* current character in content */
   char c;

   /* index of c */
   unsigned int i;

   /* source being read */
   char* content;
} lexer_t;


/* create lexer from source code */
extern lexer_t*   lexer_init                 (char* content);

/* destroy the lexer */
extern void       lexer_destroy              (lexer_t* lexer);

/* move lexer forward one char */
extern void       lexer_next                 (lexer_t* lexer);

/* skip useless characters */
extern void       lexer_pass                 (lexer_t* lexer);

/* create tokens */
extern token_t*   lexer_get_next_token       (lexer_t* lexer);

/* create token and move 1 char */
extern token_t*   lexer_next_token           (lexer_t* lexer, int token_type);

/* create string from lexer->c */
extern char*      lexer_get_c_as_string      (lexer_t* lexer);

/*
   int fskip: skip first char?

   int lskip: skip last char?
*/
extern token_t*   lexer_collect              (lexer_t* lexer, int (*end_char)(char), int fskip, int lskip, int type);

/* run lexer from source */
lexer_t* lexer_run(lexer_t*);

#endif