Home | History | Annotate | Download | only in sksl
      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 
     27 DIGIT  [0-9]
     28 LETTER [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 
     42 true { return SkSL::Token::TRUE_LITERAL; }
     43 
     44 false { return SkSL::Token::FALSE_LITERAL; }
     45 
     46 if { return SkSL::Token::IF; }
     47 
     48 @if { return SkSL::Token::STATIC_IF; }
     49 
     50 else { return SkSL::Token::ELSE; }
     51 
     52 for { return SkSL::Token::FOR; }
     53 
     54 while { return SkSL::Token::WHILE; }
     55 
     56 do { return SkSL::Token::DO; }
     57 
     58 switch { return SkSL::Token::SWITCH; }
     59 
     60 @switch { return SkSL::Token::STATIC_SWITCH; }
     61 
     62 case { return SkSL::Token::CASE; }
     63 
     64 default { return SkSL::Token::DEFAULT; }
     65 
     66 break { return SkSL::Token::BREAK; }
     67 
     68 continue { return SkSL::Token::CONTINUE; }
     69 
     70 discard { return SkSL::Token::DISCARD; }
     71 
     72 return { return SkSL::Token::RETURN; }
     73 
     74 in { return SkSL::Token::IN; }
     75 
     76 out { return SkSL::Token::OUT; }
     77 
     78 inout { return SkSL::Token::INOUT; }
     79 
     80 uniform { return SkSL::Token::UNIFORM; }
     81 
     82 const { return SkSL::Token::CONST; }
     83 
     84 lowp { return SkSL::Token::LOWP; }
     85 
     86 mediump { return SkSL::Token::MEDIUMP; }
     87 
     88 highp { return SkSL::Token::HIGHP; }
     89 
     90 flat { return SkSL::Token::FLAT; }
     91 
     92 noperspective { return SkSL::Token::NOPERSPECTIVE; }
     93 
     94 readonly { return SkSL::Token::READONLY; }
     95 
     96 writeonly { return SkSL::Token::WRITEONLY; }
     97 
     98 coherent { return SkSL::Token::COHERENT; }
     99 
    100 volatile { return SkSL::Token::VOLATILE; }
    101 
    102 restrict { return SkSL::Token::RESTRICT; }
    103 
    104 buffer { return SkSL::Token::BUFFER; }
    105 
    106 sk_has_side_effects { return SkSL::Token::HASSIDEEFFECTS; }
    107 
    108 struct { return SkSL::Token::STRUCT; }
    109 
    110 layout { return SkSL::Token::LAYOUT; }
    111 
    112 precision { 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 
    230 int skslwrap(yyscan_t scanner) {
    231     return 1; // terminate
    232 }
    233