1/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8/*
9
10    This file is IGNORED during the build process!
11
12    As this file is updated so infrequently and flex is not universally present on build machines,
13    the lex.sksl.c file must be manually regenerated if you make any changes to this file. Just run:
14
15        flex sksl.flex
16
17    You will have to manually add a copyright notice to the top of lex.sksl.c.
18
19*/
20
21%option prefix="sksl"
22%option reentrant
23%option yylineno
24%option never-interactive
25%option nounistd
26
27DIGIT  [0-9]
28LETTER [a-zA-Z_$]
29
30%%
31
32{DIGIT}*"."{DIGIT}+([eE][+-]?{DIGIT}+)? { return SkSL::Token::FLOAT_LITERAL; }
33
34{DIGIT}+"."{DIGIT}*([eE][+-]?{DIGIT}+)? { return SkSL::Token::FLOAT_LITERAL; }
35
36{DIGIT}+([eE][+-]?{DIGIT}+) { return SkSL::Token::FLOAT_LITERAL; }
37
38{DIGIT}+ { return SkSL::Token::INT_LITERAL; }
39
40"0x"[0-9a-fA-F]+ { return SkSL::Token::INT_LITERAL; }
41
42true { return SkSL::Token::TRUE_LITERAL; }
43
44false { return SkSL::Token::FALSE_LITERAL; }
45
46if { return SkSL::Token::IF; }
47
48@if { return SkSL::Token::STATIC_IF; }
49
50else { return SkSL::Token::ELSE; }
51
52for { return SkSL::Token::FOR; }
53
54while { return SkSL::Token::WHILE; }
55
56do { return SkSL::Token::DO; }
57
58switch { return SkSL::Token::SWITCH; }
59
60@switch { return SkSL::Token::STATIC_SWITCH; }
61
62case { return SkSL::Token::CASE; }
63
64default { return SkSL::Token::DEFAULT; }
65
66break { return SkSL::Token::BREAK; }
67
68continue { return SkSL::Token::CONTINUE; }
69
70discard { return SkSL::Token::DISCARD; }
71
72return { return SkSL::Token::RETURN; }
73
74in { return SkSL::Token::IN; }
75
76out { return SkSL::Token::OUT; }
77
78inout { return SkSL::Token::INOUT; }
79
80uniform { return SkSL::Token::UNIFORM; }
81
82const { return SkSL::Token::CONST; }
83
84lowp { return SkSL::Token::LOWP; }
85
86mediump { return SkSL::Token::MEDIUMP; }
87
88highp { return SkSL::Token::HIGHP; }
89
90flat { return SkSL::Token::FLAT; }
91
92noperspective { return SkSL::Token::NOPERSPECTIVE; }
93
94readonly { return SkSL::Token::READONLY; }
95
96writeonly { return SkSL::Token::WRITEONLY; }
97
98coherent { return SkSL::Token::COHERENT; }
99
100volatile { return SkSL::Token::VOLATILE; }
101
102restrict { return SkSL::Token::RESTRICT; }
103
104buffer { return SkSL::Token::BUFFER; }
105
106sk_has_side_effects { return SkSL::Token::HASSIDEEFFECTS; }
107
108struct { return SkSL::Token::STRUCT; }
109
110layout { return SkSL::Token::LAYOUT; }
111
112precision { return SkSL::Token::PRECISION; }
113
114{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::IDENTIFIER; }
115
116"#"{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::DIRECTIVE; }
117
118"@"{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::SECTION; }
119
120"(" { return SkSL::Token::LPAREN; }
121
122")" { return SkSL::Token::RPAREN; }
123
124"{" { return SkSL::Token::LBRACE; }
125
126"}" { return SkSL::Token::RBRACE; }
127
128"[" { return SkSL::Token::LBRACKET; }
129
130"]" { return SkSL::Token::RBRACKET; }
131
132"." { return SkSL::Token::DOT; }
133
134"," { return SkSL::Token::COMMA; }
135
136"++" { return SkSL::Token::PLUSPLUS; }
137
138"--" { return SkSL::Token::MINUSMINUS; }
139
140"+" { return SkSL::Token::PLUS; }
141
142"-" { return SkSL::Token::MINUS; }
143
144"*" { return SkSL::Token::STAR; }
145
146"/" { return SkSL::Token::SLASH; }
147
148"%" { return SkSL::Token::PERCENT; }
149
150"<<" { return SkSL::Token::SHL; }
151
152">>" { return SkSL::Token::SHR; }
153
154"|" { return SkSL::Token::BITWISEOR; }
155
156"^" { return SkSL::Token::BITWISEXOR; }
157
158"&" { return SkSL::Token::BITWISEAND; }
159
160"~" { return SkSL::Token::BITWISENOT; }
161
162"||" { return SkSL::Token::LOGICALOR; }
163
164"^^" { return SkSL::Token::LOGICALXOR; }
165
166"&&" { return SkSL::Token::LOGICALAND; }
167
168"!" { return SkSL::Token::LOGICALNOT; }
169
170"?" { return SkSL::Token::QUESTION; }
171
172":" { return SkSL::Token::COLON; }
173
174"=" { return SkSL::Token::EQ; }
175
176"==" { return SkSL::Token::EQEQ; }
177
178"!=" { return SkSL::Token::NEQ; }
179
180">" { return SkSL::Token::GT; }
181
182"<" { return SkSL::Token::LT; }
183
184">=" { return SkSL::Token::GTEQ; }
185
186"<=" { return SkSL::Token::LTEQ; }
187
188"+=" { return SkSL::Token::PLUSEQ; }
189
190"-=" { return SkSL::Token::MINUSEQ; }
191
192"*=" { return SkSL::Token::STAREQ; }
193
194"/=" { return SkSL::Token::SLASHEQ; }
195
196"%=" { return SkSL::Token::PERCENTEQ; }
197
198"<<=" { return SkSL::Token::SHLEQ; }
199
200">>=" { return SkSL::Token::SHREQ; }
201
202"|=" { return SkSL::Token::BITWISEOREQ; }
203
204"^=" { return SkSL::Token::BITWISEXOREQ; }
205
206"&=" { return SkSL::Token::BITWISEANDEQ; }
207
208"||=" { return SkSL::Token::LOGICALOREQ; }
209
210"^^=" { return SkSL::Token::LOGICALXOREQ; }
211
212"&&=" { return SkSL::Token::LOGICALANDEQ; }
213
214";" { return SkSL::Token::SEMICOLON; }
215
216"->" { return SkSL::Token::ARROW; }
217
218"::" { return SkSL::Token::COLONCOLON; }
219
220[ \t\r\n]+ { return SkSL::Token::WHITESPACE; }
221
222"//".* /* line comment */
223
224"/*"([^*]|"*"[^/])*"*/" /* block comment */
225
226.    { return SkSL::Token::INVALID_TOKEN; }
227
228%%
229
230int skslwrap(yyscan_t scanner) {
231    return 1; // terminate
232}
233