1 /* 2 * Copyright 2017 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 /***************************************************************************************** 8 ******************** This file was generated by sksllex. Do not edit. ******************* 9 *****************************************************************************************/ 10 #ifndef SKSL_Lexer 11 #define SKSL_Lexer 12 #include <cstddef> 13 #include <cstdint> 14 #include <string_view> 15 namespace SkSL { 16 17 struct Token { 18 enum class Kind { 19 TK_END_OF_FILE, 20 TK_FLOAT_LITERAL, 21 TK_INT_LITERAL, 22 TK_BAD_OCTAL, 23 TK_TRUE_LITERAL, 24 TK_FALSE_LITERAL, 25 TK_IF, 26 TK_STATIC_IF, 27 TK_ELSE, 28 TK_FOR, 29 TK_WHILE, 30 TK_DO, 31 TK_SWITCH, 32 TK_STATIC_SWITCH, 33 TK_CASE, 34 TK_DEFAULT, 35 TK_BREAK, 36 TK_CONTINUE, 37 TK_DISCARD, 38 TK_RETURN, 39 TK_IN, 40 TK_OUT, 41 TK_INOUT, 42 TK_UNIFORM, 43 TK_CONST, 44 TK_FLAT, 45 TK_NOPERSPECTIVE, 46 TK_INLINE, 47 TK_NOINLINE, 48 TK_HASSIDEEFFECTS, 49 TK_STRUCT, 50 TK_LAYOUT, 51 TK_HIGHP, 52 TK_MEDIUMP, 53 TK_LOWP, 54 TK_ES3, 55 TK_RESERVED, 56 TK_IDENTIFIER, 57 TK_DIRECTIVE, 58 TK_LPAREN, 59 TK_RPAREN, 60 TK_LBRACE, 61 TK_RBRACE, 62 TK_LBRACKET, 63 TK_RBRACKET, 64 TK_DOT, 65 TK_COMMA, 66 TK_PLUSPLUS, 67 TK_MINUSMINUS, 68 TK_PLUS, 69 TK_MINUS, 70 TK_STAR, 71 TK_SLASH, 72 TK_PERCENT, 73 TK_SHL, 74 TK_SHR, 75 TK_BITWISEOR, 76 TK_BITWISEXOR, 77 TK_BITWISEAND, 78 TK_BITWISENOT, 79 TK_LOGICALOR, 80 TK_LOGICALXOR, 81 TK_LOGICALAND, 82 TK_LOGICALNOT, 83 TK_QUESTION, 84 TK_COLON, 85 TK_EQ, 86 TK_EQEQ, 87 TK_NEQ, 88 TK_GT, 89 TK_LT, 90 TK_GTEQ, 91 TK_LTEQ, 92 TK_PLUSEQ, 93 TK_MINUSEQ, 94 TK_STAREQ, 95 TK_SLASHEQ, 96 TK_PERCENTEQ, 97 TK_SHLEQ, 98 TK_SHREQ, 99 TK_BITWISEOREQ, 100 TK_BITWISEXOREQ, 101 TK_BITWISEANDEQ, 102 TK_SEMICOLON, 103 TK_WHITESPACE, 104 TK_LINE_COMMENT, 105 TK_BLOCK_COMMENT, 106 TK_INVALID, 107 TK_NONE, 108 }; 109 TokenToken110 Token() {} TokenToken111 Token(Kind kind, int32_t offset, int32_t length, int32_t line) 112 : fKind(kind), fOffset(offset), fLength(length), fLine(line) {} 113 114 Kind fKind = Kind::TK_NONE; 115 int32_t fOffset = -1; 116 int32_t fLength = -1; 117 int32_t fLine = -1; 118 }; 119 120 class Lexer { 121 public: start(std::string_view text)122 void start(std::string_view text) { 123 fText = text; 124 fOffset = 0; 125 fLine = 1; 126 } 127 128 Token next(); 129 130 struct Checkpoint { 131 int32_t fOffset; 132 int32_t fLine; 133 }; 134 getCheckpoint()135 Checkpoint getCheckpoint() const { return {fOffset, fLine}; } 136 rewindToCheckpoint(Checkpoint checkpoint)137 void rewindToCheckpoint(Checkpoint checkpoint) { 138 fOffset = checkpoint.fOffset; 139 fLine = checkpoint.fLine; 140 } 141 142 private: 143 std::string_view fText; 144 int32_t fOffset; 145 int32_t fLine; 146 }; 147 148 } // namespace SkSL 149 #endif 150