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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
|
/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/*****************************************************************************************
******************** This file was generated by sksllex. Do not edit. *******************
*****************************************************************************************/
#ifndef SKSL_Lexer
#define SKSL_Lexer
#include <cstddef>
#include <cstdint>
namespace SkSL {
struct Token {
enum Kind {
#undef END_OF_FILE
END_OF_FILE,
#undef FLOAT_LITERAL
FLOAT_LITERAL,
#undef INT_LITERAL
INT_LITERAL,
#undef TRUE_LITERAL
TRUE_LITERAL,
#undef FALSE_LITERAL
FALSE_LITERAL,
#undef IF
IF,
#undef STATIC_IF
STATIC_IF,
#undef ELSE
ELSE,
#undef FOR
FOR,
#undef WHILE
WHILE,
#undef DO
DO,
#undef SWITCH
SWITCH,
#undef STATIC_SWITCH
STATIC_SWITCH,
#undef CASE
CASE,
#undef DEFAULT
DEFAULT,
#undef BREAK
BREAK,
#undef CONTINUE
CONTINUE,
#undef DISCARD
DISCARD,
#undef RETURN
RETURN,
#undef IN
IN,
#undef OUT
OUT,
#undef INOUT
INOUT,
#undef UNIFORM
UNIFORM,
#undef CONST
CONST,
#undef LOWP
LOWP,
#undef MEDIUMP
MEDIUMP,
#undef HIGHP
HIGHP,
#undef FLAT
FLAT,
#undef NOPERSPECTIVE
NOPERSPECTIVE,
#undef READONLY
READONLY,
#undef WRITEONLY
WRITEONLY,
#undef COHERENT
COHERENT,
#undef VOLATILE
VOLATILE,
#undef RESTRICT
RESTRICT,
#undef BUFFER
BUFFER,
#undef HASSIDEEFFECTS
HASSIDEEFFECTS,
#undef STRUCT
STRUCT,
#undef LAYOUT
LAYOUT,
#undef PRECISION
PRECISION,
#undef ENUM
ENUM,
#undef CLASS
CLASS,
#undef IDENTIFIER
IDENTIFIER,
#undef DIRECTIVE
DIRECTIVE,
#undef SECTION
SECTION,
#undef LPAREN
LPAREN,
#undef RPAREN
RPAREN,
#undef LBRACE
LBRACE,
#undef RBRACE
RBRACE,
#undef LBRACKET
LBRACKET,
#undef RBRACKET
RBRACKET,
#undef DOT
DOT,
#undef COMMA
COMMA,
#undef PLUSPLUS
PLUSPLUS,
#undef MINUSMINUS
MINUSMINUS,
#undef PLUS
PLUS,
#undef MINUS
MINUS,
#undef STAR
STAR,
#undef SLASH
SLASH,
#undef PERCENT
PERCENT,
#undef SHL
SHL,
#undef SHR
SHR,
#undef BITWISEOR
BITWISEOR,
#undef BITWISEXOR
BITWISEXOR,
#undef BITWISEAND
BITWISEAND,
#undef BITWISENOT
BITWISENOT,
#undef LOGICALOR
LOGICALOR,
#undef LOGICALXOR
LOGICALXOR,
#undef LOGICALAND
LOGICALAND,
#undef LOGICALNOT
LOGICALNOT,
#undef QUESTION
QUESTION,
#undef COLONCOLON
COLONCOLON,
#undef COLON
COLON,
#undef EQ
EQ,
#undef EQEQ
EQEQ,
#undef NEQ
NEQ,
#undef GT
GT,
#undef LT
LT,
#undef GTEQ
GTEQ,
#undef LTEQ
LTEQ,
#undef PLUSEQ
PLUSEQ,
#undef MINUSEQ
MINUSEQ,
#undef STAREQ
STAREQ,
#undef SLASHEQ
SLASHEQ,
#undef PERCENTEQ
PERCENTEQ,
#undef SHLEQ
SHLEQ,
#undef SHREQ
SHREQ,
#undef BITWISEOREQ
BITWISEOREQ,
#undef BITWISEXOREQ
BITWISEXOREQ,
#undef BITWISEANDEQ
BITWISEANDEQ,
#undef LOGICALOREQ
LOGICALOREQ,
#undef LOGICALXOREQ
LOGICALXOREQ,
#undef LOGICALANDEQ
LOGICALANDEQ,
#undef SEMICOLON
SEMICOLON,
#undef ARROW
ARROW,
#undef WHITESPACE
WHITESPACE,
#undef LINE_COMMENT
LINE_COMMENT,
#undef BLOCK_COMMENT
BLOCK_COMMENT,
#undef INVALID
INVALID,
};
Token() : fKind(Kind::INVALID), fOffset(-1), fLength(-1) {}
Token(Kind kind, int offset, int length) : fKind(kind), fOffset(offset), fLength(length) {}
Kind fKind;
int fOffset;
int fLength;
};
class Lexer {
public:
void start(const char* text, size_t length) {
fText = text;
fLength = length;
fOffset = 0;
}
Token next();
private:
const char* fText;
int fLength;
int fOffset;
};
} // namespace
#endif
|