| FLOAT_LITERAL = [0-9]*\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+\.[0-9]*([eE][+-]?[0-9]+)?|[0-9]+([eE][+-]?[0-9]+) |
| INT_LITERAL = [0-9]+|0x[0-9a-fA-F]+ |
| TRUE_LITERAL = "true" |
| FALSE_LITERAL = "false" |
| IF = "if" |
| STATIC_IF = "@if" |
| ELSE = "else" |
| FOR = "for" |
| WHILE = "while" |
| DO = "do" |
| SWITCH = "switch" |
| STATIC_SWITCH = "@switch" |
| CASE = "case" |
| DEFAULT = "default" |
| BREAK = "break" |
| CONTINUE = "continue" |
| DISCARD = "discard" |
| RETURN = "return" |
| NULL_LITERAL = "null" |
| IN = "in" |
| OUT = "out" |
| INOUT = "inout" |
| UNIFORM = "uniform" |
| CONST = "const" |
| FLAT = "flat" |
| NOPERSPECTIVE = "noperspective" |
| READONLY = "readonly" |
| WRITEONLY = "writeonly" |
| COHERENT = "coherent" |
| VOLATILE = "volatile" |
| RESTRICT = "restrict" |
| BUFFER = "buffer" |
| HASSIDEEFFECTS = "sk_has_side_effects" |
| PLS = "__pixel_localEXT" |
| PLSIN = "__pixel_local_inEXT" |
| PLSOUT = "__pixel_local_outEXT" |
| STRUCT = "struct" |
| LAYOUT = "layout" |
| PRECISION = "precision" |
| ENUM = "enum" |
| CLASS = "class" |
| IDENTIFIER = [a-zA-Z_$]([0-9]|[a-zA-Z_$])* |
| DIRECTIVE = #[a-zA-Z_$]([0-9]|[a-zA-Z_$])* |
| SECTION = @[a-zA-Z_$]([0-9]|[a-zA-Z_$])* |
| LPAREN = "(" |
| RPAREN = ")" |
| LBRACE = "{" |
| RBRACE = "}" |
| LBRACKET = "[" |
| RBRACKET = "]" |
| DOT = "." |
| COMMA = "," |
| PLUSPLUS = "++" |
| MINUSMINUS = "--" |
| PLUS = "+" |
| MINUS = "-" |
| STAR = "*" |
| SLASH = "/" |
| PERCENT = "%" |
| SHL = "<<" |
| SHR = ">>" |
| BITWISEOR = "|" |
| BITWISEXOR = "^" |
| BITWISEAND = "&" |
| BITWISENOT = "~" |
| LOGICALOR = "||" |
| LOGICALXOR = "^^" |
| LOGICALAND = "&&" |
| LOGICALNOT = "!" |
| QUESTION = "?" |
| COLONCOLON = "::" |
| COLON = ":" |
| EQ = "=" |
| EQEQ = "==" |
| NEQ = "!=" |
| GT = ">" |
| LT = "<" |
| GTEQ = ">=" |
| LTEQ = "<=" |
| PLUSEQ = "+=" |
| MINUSEQ = "-=" |
| STAREQ = "*=" |
| SLASHEQ = "/=" |
| PERCENTEQ = "%=" |
| SHLEQ = "<<=" |
| SHREQ = ">>=" |
| BITWISEOREQ = "|=" |
| BITWISEXOREQ = "^=" |
| BITWISEANDEQ = "&=" |
| LOGICALOREQ = "||=" |
| LOGICALXOREQ = "^^=" |
| LOGICALANDEQ = "&&=" |
| SEMICOLON = ";" |
| ARROW = "->" |
| WHITESPACE = \s+ |
| LINE_COMMENT = //.* |
| BLOCK_COMMENT = /\*([^*]|\*[^/])*\*/ |
| INVALID = . |