Chromium Code Reviews| 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; } |
|
dogben
2016/06/20 16:23:19
I don't know flex well enough to know if this will
ethannicholas
2016/06/20 17:45:49
The order only matters when the matched text is th
|
| + |
| +"^^" { 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 |
| +} |