blob: fc276c96046fe7dca37fedc56f4867ed4af90459 [file] [log] [blame]
// *****************
// *** IMPORTANT ***
// *****************
//
// 1. This file is only used when gn arg sksl_lex is set to true. It is used to regenerate the
// SkSLLexer.h and SkSLLexer.cpp files.
// 2. Since token IDs are used to identify operators and baked into the .dehydrated.sksl files,
// after modifying this file it is likely everything will break until you update the dehydrated
// binaries. If things break after updating the lexer, set REHYDRATE in SkSLCompiler.cpp to 0,
// rebuild, and then set it back to 1.
FLOAT_LITERAL = [0-9]*\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+\.[0-9]*([eE][+-]?[0-9]+)?|[0-9]+([eE][+-]?[0-9]+)
INT_LITERAL = ([1-9][0-9]*|0[0-7]*|0[xX][0-9a-fA-F]+)[uU]?
BAD_OCTAL = (0[0-9]+)[uU]?
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"
IN = "in"
OUT = "out"
INOUT = "inout"
UNIFORM = "uniform"
CONST = "const"
FLAT = "flat"
NOPERSPECTIVE = "noperspective"
INLINE = "inline"
NOINLINE = "noinline"
PURE = "$pure"
READONLY = "readonly"
WRITEONLY = "writeonly"
BUFFER = "buffer"
STRUCT = "struct"
LAYOUT = "layout"
HIGHP = "highp"
MEDIUMP = "mediump"
LOWP = "lowp"
ES3 = "$es3"
THREADGROUP = "threadgroup"
RESERVED = attribute|varying|precision|invariant|asm|class|union|enum|typedef|template|this|packed|goto|volatile|public|static|extern|external|interface|long|double|fixed|unsigned|superp|input|output|hvec[234]|dvec[234]|fvec[234]|sampler[13]D|sampler[12]DShadow|sampler3DRect|sampler2DRectShadow|samplerCube|sizeof|cast|namespace|using|gl_[0-9a-zA-Z_]*
IDENTIFIER = [a-zA-Z_$][0-9a-zA-Z_]*
DIRECTIVE = #[a-zA-Z_][0-9a-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 = "?"
COLON = ":"
EQ = "="
EQEQ = "=="
NEQ = "!="
GT = ">"
LT = "<"
GTEQ = ">="
LTEQ = "<="
PLUSEQ = "+="
MINUSEQ = "-="
STAREQ = "*="
SLASHEQ = "/="
PERCENTEQ = "%="
SHLEQ = "<<="
SHREQ = ">>="
BITWISEOREQ = "|="
BITWISEXOREQ = "^="
BITWISEANDEQ = "&="
SEMICOLON = ";"
WHITESPACE = \s+
LINE_COMMENT = //.*
BLOCK_COMMENT = /\*([^*]|\*[^/])*\*/
INVALID = .