blob: 67b48e9cb92f7fa2e9d1d0624bc1021cee69a0e4 [file] [log] [blame]
ethannicholasb3058bd2016-07-01 08:22:01 -07001/*
2
3 This file is IGNORED during the build process!
4
5 As this file is updated so infrequently and flex is not universally present on build machines,
6 the lex.sksl.c file must be manually regenerated if you make any changes to this file. Just run:
7
8 flex sksl.flex
9
10 You will have to manually add a copyright notice to the top of lex.sksl.c.
11
12*/
13
14%option prefix="sksl"
15%option reentrant
16%option yylineno
17%option never-interactive
18%option nounistd
19
20DIGIT [0-9]
21LETTER [a-zA-Z_$]
22
23%%
24
25{DIGIT}*"."{DIGIT}+([eE][+-]?{DIGIT}+)? { return SkSL::Token::FLOAT_LITERAL; }
26
27{DIGIT}+"."{DIGIT}*([eE][+-]?{DIGIT}+)? { return SkSL::Token::FLOAT_LITERAL; }
28
29{DIGIT}+([eE][+-]?{DIGIT}+) { return SkSL::Token::FLOAT_LITERAL; }
30
31{DIGIT}+ { return SkSL::Token::INT_LITERAL; }
32
33true { return SkSL::Token::TRUE_LITERAL; }
34
35false { return SkSL::Token::FALSE_LITERAL; }
36
37if { return SkSL::Token::IF; }
38
39else { return SkSL::Token::ELSE; }
40
41for { return SkSL::Token::FOR; }
42
43while { return SkSL::Token::WHILE; }
44
45do { return SkSL::Token::DO; }
46
47break { return SkSL::Token::BREAK; }
48
49continue { return SkSL::Token::CONTINUE; }
50
51discard { return SkSL::Token::DISCARD; }
52
53return { return SkSL::Token::RETURN; }
54
55in { return SkSL::Token::IN; }
56
57out { return SkSL::Token::OUT; }
58
59inout { return SkSL::Token::INOUT; }
60
61uniform { return SkSL::Token::UNIFORM; }
62
63const { return SkSL::Token::CONST; }
64
65lowp { return SkSL::Token::LOWP; }
66
67mediump { return SkSL::Token::MEDIUMP; }
68
69highp { return SkSL::Token::HIGHP; }
70
ethannicholasf789b382016-08-03 12:43:36 -070071flat { return SkSL::Token::FLAT; }
72
73noperspective { return SkSL::Token::NOPERSPECTIVE; }
74
ethannicholasb3058bd2016-07-01 08:22:01 -070075struct { return SkSL::Token::STRUCT; }
76
77layout { return SkSL::Token::LAYOUT; }
78
79precision { return SkSL::Token::PRECISION; }
80
81{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::IDENTIFIER; }
82
83"#"{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::DIRECTIVE; }
84
85"(" { return SkSL::Token::LPAREN; }
86
87")" { return SkSL::Token::RPAREN; }
88
89"{" { return SkSL::Token::LBRACE; }
90
91"}" { return SkSL::Token::RBRACE; }
92
93"[" { return SkSL::Token::LBRACKET; }
94
95"]" { return SkSL::Token::RBRACKET; }
96
97"." { return SkSL::Token::DOT; }
98
99"," { return SkSL::Token::COMMA; }
100
101"++" { return SkSL::Token::PLUSPLUS; }
102
103"--" { return SkSL::Token::MINUSMINUS; }
104
105"+" { return SkSL::Token::PLUS; }
106
107"-" { return SkSL::Token::MINUS; }
108
109"*" { return SkSL::Token::STAR; }
110
111"/" { return SkSL::Token::SLASH; }
112
113"%" { return SkSL::Token::PERCENT; }
114
115"<<" { return SkSL::Token::SHL; }
116
117">>" { return SkSL::Token::SHR; }
118
119"|" { return SkSL::Token::BITWISEOR; }
120
121"^" { return SkSL::Token::BITWISEXOR; }
122
123"&" { return SkSL::Token::BITWISEAND; }
124
125"||" { return SkSL::Token::LOGICALOR; }
126
127"^^" { return SkSL::Token::LOGICALXOR; }
128
129"&&" { return SkSL::Token::LOGICALAND; }
130
jvanverth9df16b52016-10-11 10:03:56 -0700131"!" { return SkSL::Token::NOT; }
ethannicholasb3058bd2016-07-01 08:22:01 -0700132
133"?" { return SkSL::Token::QUESTION; }
134
135":" { return SkSL::Token::COLON; }
136
137"=" { return SkSL::Token::EQ; }
138
139"==" { return SkSL::Token::EQEQ; }
140
141"!=" { return SkSL::Token::NEQ; }
142
143">" { return SkSL::Token::GT; }
144
145"<" { return SkSL::Token::LT; }
146
147">=" { return SkSL::Token::GTEQ; }
148
149"<=" { return SkSL::Token::LTEQ; }
150
151"+=" { return SkSL::Token::PLUSEQ; }
152
153"-=" { return SkSL::Token::MINUSEQ; }
154
155"*=" { return SkSL::Token::STAREQ; }
156
157"/=" { return SkSL::Token::SLASHEQ; }
158
159"%=" { return SkSL::Token::PERCENTEQ; }
160
161"<<=" { return SkSL::Token::SHLEQ; }
162
163">>=" { return SkSL::Token::SHREQ; }
164
165"|=" { return SkSL::Token::BITWISEOREQ; }
166
167"^=" { return SkSL::Token::BITWISEXOREQ; }
168
169"&=" { return SkSL::Token::BITWISEANDEQ; }
170
171"||=" { return SkSL::Token::LOGICALOREQ; }
172
173"^^=" { return SkSL::Token::LOGICALXOREQ; }
174
175"&&=" { return SkSL::Token::LOGICALANDEQ; }
176
177";" { return SkSL::Token::SEMICOLON; }
178
179"//".* /* line comment */
180
181"/*"([^*]|"*"[^/])*"*/" /* block comment */
182
183[ \t\r\n]+ /* whitespace */
184
185. { return SkSL::Token::INVALID_TOKEN; }
186
187%%
188
189int skslwrap(yyscan_t scanner) {
190 return 1; // terminate
191}