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