blob: 25216bd60708f19a6e47826a15d122cf83e13d54 [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
ethannicholas5961bc92016-10-12 06:39:56 -070033"0x"[0-9a-fA-F]+ { return SkSL::Token::INT_LITERAL; }
34
ethannicholasb3058bd2016-07-01 08:22:01 -070035true { return SkSL::Token::TRUE_LITERAL; }
36
37false { return SkSL::Token::FALSE_LITERAL; }
38
39if { return SkSL::Token::IF; }
40
41else { return SkSL::Token::ELSE; }
42
43for { return SkSL::Token::FOR; }
44
45while { return SkSL::Token::WHILE; }
46
47do { return SkSL::Token::DO; }
48
49break { return SkSL::Token::BREAK; }
50
51continue { return SkSL::Token::CONTINUE; }
52
53discard { return SkSL::Token::DISCARD; }
54
55return { return SkSL::Token::RETURN; }
56
57in { return SkSL::Token::IN; }
58
59out { return SkSL::Token::OUT; }
60
61inout { return SkSL::Token::INOUT; }
62
63uniform { return SkSL::Token::UNIFORM; }
64
65const { return SkSL::Token::CONST; }
66
67lowp { return SkSL::Token::LOWP; }
68
69mediump { return SkSL::Token::MEDIUMP; }
70
71highp { return SkSL::Token::HIGHP; }
72
ethannicholasf789b382016-08-03 12:43:36 -070073flat { return SkSL::Token::FLAT; }
74
75noperspective { return SkSL::Token::NOPERSPECTIVE; }
76
Brian Salomonf9f45122016-11-29 11:59:17 -050077readonly { return SkSL::Token::READONLY; }
78
79writeonly { return SkSL::Token::WRITEONLY; }
80
81coherent { return SkSL::Token::COHERENT; }
82
83volatile { return SkSL::Token::VOLATILE; }
84
85restrict { return SkSL::Token::RESTRICT; }
86
ethannicholasb3058bd2016-07-01 08:22:01 -070087struct { return SkSL::Token::STRUCT; }
88
89layout { return SkSL::Token::LAYOUT; }
90
91precision { return SkSL::Token::PRECISION; }
92
93{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::IDENTIFIER; }
94
95"#"{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::DIRECTIVE; }
96
97"(" { return SkSL::Token::LPAREN; }
98
99")" { return SkSL::Token::RPAREN; }
100
101"{" { return SkSL::Token::LBRACE; }
102
103"}" { return SkSL::Token::RBRACE; }
104
105"[" { return SkSL::Token::LBRACKET; }
106
107"]" { return SkSL::Token::RBRACKET; }
108
109"." { return SkSL::Token::DOT; }
110
111"," { return SkSL::Token::COMMA; }
112
113"++" { return SkSL::Token::PLUSPLUS; }
114
115"--" { return SkSL::Token::MINUSMINUS; }
116
117"+" { return SkSL::Token::PLUS; }
118
119"-" { return SkSL::Token::MINUS; }
120
121"*" { return SkSL::Token::STAR; }
122
123"/" { return SkSL::Token::SLASH; }
124
125"%" { return SkSL::Token::PERCENT; }
126
127"<<" { return SkSL::Token::SHL; }
128
129">>" { return SkSL::Token::SHR; }
130
131"|" { return SkSL::Token::BITWISEOR; }
132
133"^" { return SkSL::Token::BITWISEXOR; }
134
135"&" { return SkSL::Token::BITWISEAND; }
136
ethannicholas5961bc92016-10-12 06:39:56 -0700137"~" { return SkSL::Token::BITWISENOT; }
138
ethannicholasb3058bd2016-07-01 08:22:01 -0700139"||" { return SkSL::Token::LOGICALOR; }
140
141"^^" { return SkSL::Token::LOGICALXOR; }
142
143"&&" { return SkSL::Token::LOGICALAND; }
144
ethannicholas5961bc92016-10-12 06:39:56 -0700145"!" { return SkSL::Token::LOGICALNOT; }
ethannicholasb3058bd2016-07-01 08:22:01 -0700146
147"?" { return SkSL::Token::QUESTION; }
148
149":" { return SkSL::Token::COLON; }
150
151"=" { return SkSL::Token::EQ; }
152
153"==" { return SkSL::Token::EQEQ; }
154
155"!=" { return SkSL::Token::NEQ; }
156
157">" { return SkSL::Token::GT; }
158
159"<" { return SkSL::Token::LT; }
160
161">=" { return SkSL::Token::GTEQ; }
162
163"<=" { return SkSL::Token::LTEQ; }
164
165"+=" { return SkSL::Token::PLUSEQ; }
166
167"-=" { return SkSL::Token::MINUSEQ; }
168
169"*=" { return SkSL::Token::STAREQ; }
170
171"/=" { return SkSL::Token::SLASHEQ; }
172
173"%=" { return SkSL::Token::PERCENTEQ; }
174
175"<<=" { return SkSL::Token::SHLEQ; }
176
177">>=" { return SkSL::Token::SHREQ; }
178
179"|=" { return SkSL::Token::BITWISEOREQ; }
180
181"^=" { return SkSL::Token::BITWISEXOREQ; }
182
183"&=" { return SkSL::Token::BITWISEANDEQ; }
184
185"||=" { return SkSL::Token::LOGICALOREQ; }
186
187"^^=" { return SkSL::Token::LOGICALXOREQ; }
188
189"&&=" { return SkSL::Token::LOGICALANDEQ; }
190
191";" { return SkSL::Token::SEMICOLON; }
192
193"//".* /* line comment */
194
195"/*"([^*]|"*"[^/])*"*/" /* block comment */
196
197[ \t\r\n]+ /* whitespace */
198
199. { return SkSL::Token::INVALID_TOKEN; }
200
201%%
202
203int skslwrap(yyscan_t scanner) {
204 return 1; // terminate
205}