1 // *****************
2 // *** IMPORTANT ***
3 // *****************
4 //
5 // 1. This file is only used when gn arg sksl_lex is set to true. It is used to regenerate the
6 //    SkSLLexer.h and SkSLLexer.cpp files.
7 // 2. Since token IDs are used to identify operators and baked into the .dehydrated.sksl files,
8 //    after modifying this file it is likely everything will break until you update the dehydrated
9 //    binaries. If things break after updating the lexer, set REHYDRATE in SkSLCompiler.cpp to 0,
10 //    rebuild, and then set it back to 1.
11 
12 FLOAT_LITERAL  = [0-9]*\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+\.[0-9]*([eE][+-]?[0-9]+)?|[0-9]+([eE][+-]?[0-9]+)
13 INT_LITERAL    = [0-9]+|0x[0-9a-fA-F]+
14 TRUE_LITERAL   = "true"
15 FALSE_LITERAL  = "false"
16 IF             = "if"
17 STATIC_IF      = "@if"
18 ELSE           = "else"
19 FOR            = "for"
20 WHILE          = "while"
21 DO             = "do"
22 SWITCH         = "switch"
23 STATIC_SWITCH  = "@switch"
24 CASE           = "case"
25 DEFAULT        = "default"
26 BREAK          = "break"
27 CONTINUE       = "continue"
28 DISCARD        = "discard"
29 RETURN         = "return"
30 NULL_LITERAL   = "null"
31 IN             = "in"
32 OUT            = "out"
33 INOUT          = "inout"
34 UNIFORM        = "uniform"
35 CONST          = "const"
36 FLAT           = "flat"
37 NOPERSPECTIVE  = "noperspective"
38 READONLY       = "readonly"
39 WRITEONLY      = "writeonly"
40 COHERENT       = "coherent"
41 VOLATILE       = "volatile"
42 RESTRICT       = "restrict"
43 BUFFER         = "buffer"
44 INLINE         = "inline"
45 HASSIDEEFFECTS = "sk_has_side_effects"
46 PLS            = "__pixel_localEXT"
47 PLSIN          = "__pixel_local_inEXT"
48 PLSOUT         = "__pixel_local_outEXT"
49 VARYING        = "varying"
50 STRUCT         = "struct"
51 LAYOUT         = "layout"
52 PRECISION      = "precision"
53 ENUM           = "enum"
54 CLASS          = "class"
55 IDENTIFIER     = [a-zA-Z_$]([0-9]|[a-zA-Z_$])*
56 DIRECTIVE      = #[a-zA-Z_$]([0-9]|[a-zA-Z_$])*
57 SECTION        = @[a-zA-Z_$]([0-9]|[a-zA-Z_$])*
58 LPAREN         = "("
59 RPAREN         = ")"
60 LBRACE         = "{"
61 RBRACE         = "}"
62 LBRACKET       = "["
63 RBRACKET       = "]"
64 DOT            = "."
65 COMMA          = ","
66 PLUSPLUS       = "++"
67 MINUSMINUS     = "--"
68 PLUS           = "+"
69 MINUS          = "-"
70 STAR           = "*"
71 SLASH          = "/"
72 PERCENT        = "%"
73 SHL            = "<<"
74 SHR            = ">>"
75 BITWISEOR      = "|"
76 BITWISEXOR     = "^"
77 BITWISEAND     = "&"
78 BITWISENOT     = "~"
79 LOGICALOR      = "||"
80 LOGICALXOR     = "^^"
81 LOGICALAND     = "&&"
82 LOGICALNOT     = "!"
83 QUESTION       = "?"
84 COLONCOLON     = "::"
85 COLON          = ":"
86 EQ             = "="
87 EQEQ           = "=="
88 NEQ            = "!="
89 GT             = ">"
90 LT             = "<"
91 GTEQ           = ">="
92 LTEQ           = "<="
93 PLUSEQ         = "+="
94 MINUSEQ        = "-="
95 STAREQ         = "*="
96 SLASHEQ        = "/="
97 PERCENTEQ      = "%="
98 SHLEQ          = "<<="
99 SHREQ          = ">>="
100 BITWISEOREQ    = "|="
101 BITWISEXOREQ   = "^="
102 BITWISEANDEQ   = "&="
103 LOGICALOREQ    = "||="
104 LOGICALXOREQ   = "^^="
105 LOGICALANDEQ   = "&&="
106 SEMICOLON      = ";"
107 ARROW          = "->"
108 WHITESPACE     = \s+
109 LINE_COMMENT   = //.*
110 BLOCK_COMMENT  = /\*([^*]|\*[^/])*\*/
111 INVALID        = .