-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlhs_parser.h
98 lines (89 loc) · 3.21 KB
/
lhs_parser.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
#pragma once
#include "lhs_config.h"
#include "lhs_buf.h"
#include "lhs_function.h"
#include "lhs_frame.h"
#include "lhs_vm.h"
#define LHS_TOKENNONE (0)
#define LHS_TOKENEOF EOF
#define LHS_TOKENSYMBOLBEGIN (UCHAR_MAX + 1)
#define LHS_TOKENEQUAL (LHS_TOKENSYMBOLBEGIN + SYMBOL_EQUAL)
#define LHS_TOKENNOTEQUAL (LHS_TOKENSYMBOLBEGIN + SYMBOL_NOTEQUAL)
#define LHS_TOKENGREATEQUAL (LHS_TOKENSYMBOLBEGIN + SYMBOL_GREATEQUAL)
#define LHS_TOKENLESSEQUAL (LHS_TOKENSYMBOLBEGIN + SYMBOL_LESSEQUAL)
#define LHS_TOKENLOGICAND (LHS_TOKENSYMBOLBEGIN + SYMBOL_LOGICAND)
#define LHS_TOKENLOGICOR (LHS_TOKENSYMBOLBEGIN + SYMBOL_LOGICOR)
#define LHS_TOKENBLSHIFT (LHS_TOKENSYMBOLBEGIN + SYMBOL_BLSHIFT)
#define LHS_TOKENBRSHIFT (LHS_TOKENSYMBOLBEGIN + SYMBOL_BRSHIFT)
#define LHS_TOKENMINUS (LHS_TOKENSYMBOLBEGIN + SYMBOL_MINUS)
#define LHS_TOKENDBDOT (LHS_TOKENSYMBOLBEGIN + SYMBOL_DBDOT)
#define LHS_TOKENSYMBOLEND (LHS_TOKENDBDOT + 1)
#define LHS_TOKENRESERVEDBEGIN (USHRT_MAX + 1)
#define LHS_TOKENGLOBAL (LHS_TOKENRESERVEDBEGIN + 1)
#define LHS_TOKENLOCAL (LHS_TOKENRESERVEDBEGIN + 2)
#define LHS_TOKENFUNCTION (LHS_TOKENRESERVEDBEGIN + 3)
#define LHS_TOKENFOR (LHS_TOKENRESERVEDBEGIN + 4)
#define LHS_TOKENWHILE (LHS_TOKENRESERVEDBEGIN + 5)
#define LHS_TOKENIF (LHS_TOKENRESERVEDBEGIN + 6)
#define LHS_TOKENELSE (LHS_TOKENRESERVEDBEGIN + 7)
#define LHS_TOKENDO (LHS_TOKENRESERVEDBEGIN + 8)
#define LHS_TOKENWHEN (LHS_TOKENRESERVEDBEGIN + 9)
#define LHS_TOKENBREAK (LHS_TOKENRESERVEDBEGIN + 10)
#define LHS_TOKENCONTINUE (LHS_TOKENRESERVEDBEGIN + 11)
#define LHS_TOKENTRUE (LHS_TOKENRESERVEDBEGIN + 12)
#define LHS_TOKENFALSE (LHS_TOKENRESERVEDBEGIN + 13)
#define LHS_TOKENRETURN (LHS_TOKENRESERVEDBEGIN + 14)
#define LHS_TOKENRESERVEDEND (LHS_TOKENRESERVEDBEGIN + 15)
#define LHS_TOKENIDENTIFIER (LHS_TOKENRESERVEDBEGIN + 16)
#define LHS_TOKENINTEGER (LHS_TOKENRESERVEDBEGIN + 17)
#define LHS_TOKENNUMBER (LHS_TOKENRESERVEDBEGIN + 18)
#define LHS_TOKENSTRING (LHS_TOKENRESERVEDBEGIN + 19)
#define lhsparser_castlex(lf) \
((LHSLexical*)(lf)->lexical)
typedef struct LHSToken
{
int t;
LHSBuf buf;
} LHSToken;
typedef struct LHSJmp
{
int len;
size_t pos;
LHSFunction* func;
struct LHSJmp* next;
} LHSJmp;
typedef struct LHSChunk
{
int index;
struct LHSChunk* next;
struct LHSChunk* parent;
} LHSChunk;
typedef struct LHSRegion
{
int token;
int nbreak;
LHSJmp* breakjmp;
union
{
size_t pos;
LHSJmp* jmp;
} continuejmp;
struct LHSRegion* next;
struct LHSRegion* parent;
} LHSRegion;
typedef struct LHSLexical
{
int nstack;
int chunkid;
LHSToken token;
LHSToken lookahead;
LHSJmp* alljmp;
LHSChunk* curchunk;
LHSChunk* allchunk;
LHSRegion* curregion;
LHSRegion* allregion;
LHSFunction* curfunction;
LHSFrame* curframe;
} LHSLexical;
extern const char* lhsparser_symbols[];
int lhsparser_loadfile(LHSVM* vm, const char* fname);