Index: src/sksl/sksl.flex |
diff --git a/src/sksl/sksl.flex b/src/sksl/sksl.flex |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cbc938a3bbaa17b0105ac9fa4234a1073e50df2f |
--- /dev/null |
+++ b/src/sksl/sksl.flex |
@@ -0,0 +1,187 @@ |
+/* |
+ |
+ This file is IGNORED during the build process! |
+ |
+ As this file is updated so infrequently and flex is not universally present on build machines, |
+ the lex.sksl.c file must be manually regenerated if you make any changes to this file. Just run: |
+ |
+ flex sksl.flex |
+ |
+ You will have to manually add a copyright notice to the top of lex.sksl.c. |
+ |
+*/ |
+ |
+%option prefix="sksl" |
+%option reentrant |
+%option yylineno |
+%option never-interactive |
+%option nounistd |
+ |
+DIGIT [0-9] |
+LETTER [a-zA-Z_$] |
+ |
+%% |
+ |
+{DIGIT}*"."{DIGIT}+([eE][+-]?{DIGIT}+)? { return SkSL::Token::FLOAT_LITERAL; } |
+ |
+{DIGIT}+"."{DIGIT}*([eE][+-]?{DIGIT}+)? { return SkSL::Token::FLOAT_LITERAL; } |
+ |
+{DIGIT}+([eE][+-]?{DIGIT}+) { return SkSL::Token::FLOAT_LITERAL; } |
+ |
+{DIGIT}+ { return SkSL::Token::INT_LITERAL; } |
+ |
+true { return SkSL::Token::TRUE_LITERAL; } |
+ |
+false { return SkSL::Token::FALSE_LITERAL; } |
+ |
+if { return SkSL::Token::IF; } |
+ |
+else { return SkSL::Token::ELSE; } |
+ |
+for { return SkSL::Token::FOR; } |
+ |
+while { return SkSL::Token::WHILE; } |
+ |
+do { return SkSL::Token::DO; } |
+ |
+break { return SkSL::Token::BREAK; } |
+ |
+continue { return SkSL::Token::CONTINUE; } |
+ |
+discard { return SkSL::Token::DISCARD; } |
+ |
+return { return SkSL::Token::RETURN; } |
+ |
+in { return SkSL::Token::IN; } |
+ |
+out { return SkSL::Token::OUT; } |
+ |
+inout { return SkSL::Token::INOUT; } |
+ |
+uniform { return SkSL::Token::UNIFORM; } |
+ |
+const { return SkSL::Token::CONST; } |
+ |
+lowp { return SkSL::Token::LOWP; } |
+ |
+mediump { return SkSL::Token::MEDIUMP; } |
+ |
+highp { return SkSL::Token::HIGHP; } |
+ |
+struct { return SkSL::Token::STRUCT; } |
+ |
+layout { return SkSL::Token::LAYOUT; } |
+ |
+precision { return SkSL::Token::PRECISION; } |
+ |
+{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::IDENTIFIER; } |
+ |
+"#"{LETTER}({DIGIT}|{LETTER})* { return SkSL::Token::DIRECTIVE; } |
+ |
+"(" { return SkSL::Token::LPAREN; } |
+ |
+")" { return SkSL::Token::RPAREN; } |
+ |
+"{" { return SkSL::Token::LBRACE; } |
+ |
+"}" { return SkSL::Token::RBRACE; } |
+ |
+"[" { return SkSL::Token::LBRACKET; } |
+ |
+"]" { return SkSL::Token::RBRACKET; } |
+ |
+"." { return SkSL::Token::DOT; } |
+ |
+"," { return SkSL::Token::COMMA; } |
+ |
+"++" { return SkSL::Token::PLUSPLUS; } |
+ |
+"--" { return SkSL::Token::MINUSMINUS; } |
+ |
+"+" { return SkSL::Token::PLUS; } |
+ |
+"-" { return SkSL::Token::MINUS; } |
+ |
+"*" { return SkSL::Token::STAR; } |
+ |
+"/" { return SkSL::Token::SLASH; } |
+ |
+"%" { return SkSL::Token::PERCENT; } |
+ |
+"<<" { return SkSL::Token::SHL; } |
+ |
+">>" { return SkSL::Token::SHR; } |
+ |
+"|" { return SkSL::Token::BITWISEOR; } |
+ |
+"^" { return SkSL::Token::BITWISEXOR; } |
+ |
+"&" { return SkSL::Token::BITWISEAND; } |
+ |
+"||" { return SkSL::Token::LOGICALOR; } |
+ |
+"^^" { return SkSL::Token::LOGICALXOR; } |
+ |
+"&&" { return SkSL::Token::LOGICALAND; } |
+ |
+"!" { return SkSL::Token::NOT; } |
+ |
+"?" { return SkSL::Token::QUESTION; } |
+ |
+":" { return SkSL::Token::COLON; } |
+ |
+"=" { return SkSL::Token::EQ; } |
+ |
+"==" { return SkSL::Token::EQEQ; } |
+ |
+"!=" { return SkSL::Token::NEQ; } |
+ |
+">" { return SkSL::Token::GT; } |
+ |
+"<" { return SkSL::Token::LT; } |
+ |
+">=" { return SkSL::Token::GTEQ; } |
+ |
+"<=" { return SkSL::Token::LTEQ; } |
+ |
+"+=" { return SkSL::Token::PLUSEQ; } |
+ |
+"-=" { return SkSL::Token::MINUSEQ; } |
+ |
+"*=" { return SkSL::Token::STAREQ; } |
+ |
+"/=" { return SkSL::Token::SLASHEQ; } |
+ |
+"%=" { return SkSL::Token::PERCENTEQ; } |
+ |
+"<<=" { return SkSL::Token::SHLEQ; } |
+ |
+">>=" { return SkSL::Token::SHREQ; } |
+ |
+"|=" { return SkSL::Token::BITWISEOREQ; } |
+ |
+"^=" { return SkSL::Token::BITWISEXOREQ; } |
+ |
+"&=" { return SkSL::Token::BITWISEANDEQ; } |
+ |
+"||=" { return SkSL::Token::LOGICALOREQ; } |
+ |
+"^^=" { return SkSL::Token::LOGICALXOREQ; } |
+ |
+"&&=" { return SkSL::Token::LOGICALANDEQ; } |
+ |
+";" { return SkSL::Token::SEMICOLON; } |
+ |
+"//".* /* line comment */ |
+ |
+"/*"([^*]|"*"[^/])*"*/" /* block comment */ |
+ |
+[ \t\r\n]+ /* whitespace */ |
+ |
+. { return SkSL::Token::INVALID_TOKEN; } |
+ |
+%% |
+ |
+int skslwrap(yyscan_t scanner) { |
+ return 1; // terminate |
+} |