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        = .