-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexer.h
98 lines (88 loc) · 1.52 KB
/
lexer.h
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// (c) 2020 shdown
// This code is licensed under MIT license (see LICENSE.MIT for details)
#pragma once
#include "common.h"
#include "position.h"
typedef enum {
LK_AND,
LK_AND_AND,
LK_AND_AND_EQ,
LK_AND_EQ,
LK_AT,
LK_BANG,
LK_BANG_EQ,
LK_BREAK,
LK_COMMA,
LK_CONTINUE,
LK_DOT,
LK_ELIF,
LK_ELSE,
LK_EOF,
LK_COLON,
LK_COLON_EQ,
LK_EQ,
LK_EQ_EQ,
LK_ERROR,
LK_FALSE,
LK_FOR,
LK_FUN,
LK_GREATER,
LK_GREATER_EQ,
LK_GREATER_GREATER,
LK_GREATER_GREATER_EQ,
LK_HAT,
LK_HAT_EQ,
LK_IDENT,
LK_IF,
LK_LBRACE,
LK_LBRACKET,
LK_LESS,
LK_LESS_EQ,
LK_LESS_LESS,
LK_LESS_LESS_EQ,
LK_LPAREN,
LK_MINUS,
LK_MINUS_EQ,
LK_MINUS_GREATER,
LK_NIL,
LK_NUMBER,
LK_OR,
LK_OR_EQ,
LK_OR_OR,
LK_OR_OR_EQ,
LK_PERCENT,
LK_PERCENT_EQ,
LK_PLUS,
LK_PLUS_EQ,
LK_RBRACE,
LK_RBRACKET,
LK_RETURN,
LK_RPAREN,
LK_SEMICOLON,
LK_SLASH,
LK_SLASH_EQ,
LK_SLASH_SLASH,
LK_SLASH_SLASH_EQ,
LK_STAR,
LK_STAR_EQ,
LK_STAR_STAR,
LK_STAR_STAR_EQ,
LK_STRING,
LK_TILDE,
LK_TILDE_EQ,
LK_TRUE,
LK_WHILE,
LK__LAST,
} LexemeKind;
typedef struct {
LexemeKind kind;
const char *start;
size_t size;
Position pos;
} Lexeme;
struct Lexer;
typedef struct Lexer Lexer;
Lexer *lexer_new(const char *source, size_t nsource);
Lexeme lexer_next(Lexer *x);
const char *lexer_error_msg(Lexer *x);
void lexer_destroy(Lexer *x);