| /* |
| * 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 is IGNORED during the build process! |
| |
| As this file is updated so infrequently and flex is not universally present on build machines, |
| the lex.sksl.c file must be manually regenerated if you make any changes to this file. Just run: |
| |
| flex sksl.flex |
| |
| You will have to manually add a copyright notice to the top of lex.sksl.c. |
| |
| */ |
| |
| %option prefix="sksl" |
| %option reentrant |
| %option yylineno |
| %option never-interactive |
| %option nounistd |
| |
| DIGIT [0-9] |
| LETTER [a-zA-Z_$] |
| |
| %% |
| |
| {DIGIT}*"."{DIGIT}+([eE][+-]?{DIGIT}+)? { return SkSL::Token::FLOAT_LITERAL; } |
| |
| {DIGIT}+"."{DIGIT}*([eE][+-]?{DIGIT}+)? { return SkSL::Token::FLOAT_LITERAL; } |
| |
| {DIGIT}+([eE][+-]?{DIGIT}+) { return SkSL::Token::FLOAT_LITERAL; } |
| |
| {DIGIT}+ { return SkSL::Token::INT_LITERAL; } |
| |
| "0x"[0-9a-fA-F]+ { return SkSL::Token::INT_LITERAL; } |
| |
| true { return SkSL::Token::TRUE_LITERAL; } |
| |
| false { return SkSL::Token::FALSE_LITERAL; } |
| |
| if { return SkSL::Token::IF; } |
| |
| else { return SkSL::Token::ELSE; } |
| |
| for { return SkSL::Token::FOR; } |
| |
| while { return SkSL::Token::WHILE; } |
| |
| do { return SkSL::Token::DO; } |
| |
| switch { return SkSL::Token::SWITCH; } |
| |
| case { return SkSL::Token::CASE; } |
| |
| default { return SkSL::Token::DEFAULT; } |
| |
| break { return SkSL::Token::BREAK; } |
| |
| continue { return SkSL::Token::CONTINUE; } |
| |
| discard { return SkSL::Token::DISCARD; } |
| |
| return { return SkSL::Token::RETURN; } |
| |
| in { return SkSL::Token::IN; } |
| |
| out { return SkSL::Token::OUT; } |
| |
| inout { return SkSL::Token::INOUT; } |
| |
| uniform { return SkSL::Token::UNIFORM; } |
| |
| const { return SkSL::Token::CONST; } |
| |
| lowp { return SkSL::Token::LOWP; } |
| |
| mediump { return SkSL::Token::MEDIUMP; } |
| |
| highp { return SkSL::Token::HIGHP; } |
| |
| flat { return SkSL::Token::FLAT; } |
| |
| noperspective { return SkSL::Token::NOPERSPECTIVE; } |
| |
| readonly { return SkSL::Token::READONLY; } |
| |
| writeonly { return SkSL::Token::WRITEONLY; } |
| |
| coherent { return SkSL::Token::COHERENT; } |
| |
| volatile { return SkSL::Token::VOLATILE; } |
| |
| restrict { return SkSL::Token::RESTRICT; } |
| |
| sk_has_side_effects { return SkSL::Token::HASSIDEEFFECTS; } |
| |
| struct { return SkSL::Token::STRUCT; } |
| |
| layout { return SkSL::Token::LAYOUT; } |
| |
| precision { return SkSL::Token::PRECISION; } |
| |
| {LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::IDENTIFIER; } |
| |
| "#"{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::DIRECTIVE; } |
| |
| "(" { return SkSL::Token::LPAREN; } |
| |
| ")" { return SkSL::Token::RPAREN; } |
| |
| "{" { return SkSL::Token::LBRACE; } |
| |
| "}" { return SkSL::Token::RBRACE; } |
| |
| "[" { return SkSL::Token::LBRACKET; } |
| |
| "]" { return SkSL::Token::RBRACKET; } |
| |
| "." { return SkSL::Token::DOT; } |
| |
| "," { return SkSL::Token::COMMA; } |
| |
| "++" { return SkSL::Token::PLUSPLUS; } |
| |
| "--" { return SkSL::Token::MINUSMINUS; } |
| |
| "+" { return SkSL::Token::PLUS; } |
| |
| "-" { return SkSL::Token::MINUS; } |
| |
| "*" { return SkSL::Token::STAR; } |
| |
| "/" { return SkSL::Token::SLASH; } |
| |
| "%" { return SkSL::Token::PERCENT; } |
| |
| "<<" { return SkSL::Token::SHL; } |
| |
| ">>" { return SkSL::Token::SHR; } |
| |
| "|" { return SkSL::Token::BITWISEOR; } |
| |
| "^" { return SkSL::Token::BITWISEXOR; } |
| |
| "&" { return SkSL::Token::BITWISEAND; } |
| |
| "~" { return SkSL::Token::BITWISENOT; } |
| |
| "||" { return SkSL::Token::LOGICALOR; } |
| |
| "^^" { return SkSL::Token::LOGICALXOR; } |
| |
| "&&" { return SkSL::Token::LOGICALAND; } |
| |
| "!" { return SkSL::Token::LOGICALNOT; } |
| |
| "?" { return SkSL::Token::QUESTION; } |
| |
| ":" { return SkSL::Token::COLON; } |
| |
| "=" { return SkSL::Token::EQ; } |
| |
| "==" { return SkSL::Token::EQEQ; } |
| |
| "!=" { return SkSL::Token::NEQ; } |
| |
| ">" { return SkSL::Token::GT; } |
| |
| "<" { return SkSL::Token::LT; } |
| |
| ">=" { return SkSL::Token::GTEQ; } |
| |
| "<=" { return SkSL::Token::LTEQ; } |
| |
| "+=" { return SkSL::Token::PLUSEQ; } |
| |
| "-=" { return SkSL::Token::MINUSEQ; } |
| |
| "*=" { return SkSL::Token::STAREQ; } |
| |
| "/=" { return SkSL::Token::SLASHEQ; } |
| |
| "%=" { return SkSL::Token::PERCENTEQ; } |
| |
| "<<=" { return SkSL::Token::SHLEQ; } |
| |
| ">>=" { return SkSL::Token::SHREQ; } |
| |
| "|=" { return SkSL::Token::BITWISEOREQ; } |
| |
| "^=" { return SkSL::Token::BITWISEXOREQ; } |
| |
| "&=" { return SkSL::Token::BITWISEANDEQ; } |
| |
| "||=" { return SkSL::Token::LOGICALOREQ; } |
| |
| "^^=" { return SkSL::Token::LOGICALXOREQ; } |
| |
| "&&=" { return SkSL::Token::LOGICALANDEQ; } |
| |
| ";" { return SkSL::Token::SEMICOLON; } |
| |
| "//".* /* line comment */ |
| |
| "/*"([^*]|"*"[^/])*"*/" /* block comment */ |
| |
| [ \t\r\n]+ /* whitespace */ |
| |
| . { return SkSL::Token::INVALID_TOKEN; } |
| |
| %% |
| |
| int skslwrap(yyscan_t scanner) { |
| return 1; // terminate |
| } |