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 namespace SkSL {
15 
16 struct Token {
17     enum class Kind {
18         TK_END_OF_FILE,
19         TK_FLOAT_LITERAL,
20         TK_INT_LITERAL,
21         TK_TRUE_LITERAL,
22         TK_FALSE_LITERAL,
23         TK_IF,
24         TK_STATIC_IF,
25         TK_ELSE,
26         TK_FOR,
27         TK_WHILE,
28         TK_DO,
29         TK_SWITCH,
30         TK_STATIC_SWITCH,
31         TK_CASE,
32         TK_DEFAULT,
33         TK_BREAK,
34         TK_CONTINUE,
35         TK_DISCARD,
36         TK_RETURN,
37         TK_NULL_LITERAL,
38         TK_IN,
39         TK_OUT,
40         TK_INOUT,
41         TK_UNIFORM,
42         TK_CONST,
43         TK_FLAT,
44         TK_NOPERSPECTIVE,
45         TK_READONLY,
46         TK_WRITEONLY,
47         TK_COHERENT,
48         TK_VOLATILE,
49         TK_RESTRICT,
50         TK_BUFFER,
51         TK_INLINE,
52         TK_HASSIDEEFFECTS,
53         TK_PLS,
54         TK_PLSIN,
55         TK_PLSOUT,
56         TK_VARYING,
57         TK_STRUCT,
58         TK_LAYOUT,
59         TK_PRECISION,
60         TK_ENUM,
61         TK_CLASS,
62         TK_IDENTIFIER,
63         TK_DIRECTIVE,
64         TK_SECTION,
65         TK_LPAREN,
66         TK_RPAREN,
67         TK_LBRACE,
68         TK_RBRACE,
69         TK_LBRACKET,
70         TK_RBRACKET,
71         TK_DOT,
72         TK_COMMA,
73         TK_PLUSPLUS,
74         TK_MINUSMINUS,
75         TK_PLUS,
76         TK_MINUS,
77         TK_STAR,
78         TK_SLASH,
79         TK_PERCENT,
80         TK_SHL,
81         TK_SHR,
82         TK_BITWISEOR,
83         TK_BITWISEXOR,
84         TK_BITWISEAND,
85         TK_BITWISENOT,
86         TK_LOGICALOR,
87         TK_LOGICALXOR,
88         TK_LOGICALAND,
89         TK_LOGICALNOT,
90         TK_QUESTION,
91         TK_COLONCOLON,
92         TK_COLON,
93         TK_EQ,
94         TK_EQEQ,
95         TK_NEQ,
96         TK_GT,
97         TK_LT,
98         TK_GTEQ,
99         TK_LTEQ,
100         TK_PLUSEQ,
101         TK_MINUSEQ,
102         TK_STAREQ,
103         TK_SLASHEQ,
104         TK_PERCENTEQ,
105         TK_SHLEQ,
106         TK_SHREQ,
107         TK_BITWISEOREQ,
108         TK_BITWISEXOREQ,
109         TK_BITWISEANDEQ,
110         TK_LOGICALOREQ,
111         TK_LOGICALXOREQ,
112         TK_LOGICALANDEQ,
113         TK_SEMICOLON,
114         TK_ARROW,
115         TK_WHITESPACE,
116         TK_LINE_COMMENT,
117         TK_BLOCK_COMMENT,
118         TK_INVALID,
119     };
120 
TokenToken121     Token() : fKind(Kind::TK_INVALID), fOffset(-1), fLength(-1) {}
122 
TokenToken123     Token(Kind kind, int32_t offset, int32_t length)
124             : fKind(kind), fOffset(offset), fLength(length) {}
125 
126     Kind fKind;
127     int fOffset;
128     int fLength;
129 };
130 
131 class Lexer {
132 public:
start(const char * text,int32_t length)133     void start(const char* text, int32_t length) {
134         fText = text;
135         fLength = length;
136         fOffset = 0;
137     }
138 
139     Token next();
140 
141 private:
142     const char* fText;
143     int32_t fLength;
144     int32_t fOffset;
145 };
146 
147 }  // namespace SkSL
148 #endif
149