blob: 7d959d2e9b4912b5fb8b6aec19f36b980230a95f [file] [log] [blame]
/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/*****************************************************************************************
******************** This file was generated by sksllex. Do not edit. *******************
*****************************************************************************************/
#ifndef SKSL_Lexer
#define SKSL_Lexer
#include <cstdint>
#include <string_view>
namespace SkSL {
struct Token {
enum class Kind {
TK_END_OF_FILE,
TK_FLOAT_LITERAL,
TK_INT_LITERAL,
TK_BAD_OCTAL,
TK_TRUE_LITERAL,
TK_FALSE_LITERAL,
TK_IF,
TK_STATIC_IF,
TK_ELSE,
TK_FOR,
TK_WHILE,
TK_DO,
TK_SWITCH,
TK_STATIC_SWITCH,
TK_CASE,
TK_DEFAULT,
TK_BREAK,
TK_CONTINUE,
TK_DISCARD,
TK_RETURN,
TK_IN,
TK_OUT,
TK_INOUT,
TK_UNIFORM,
TK_CONST,
TK_FLAT,
TK_NOPERSPECTIVE,
TK_INLINE,
TK_NOINLINE,
TK_HASSIDEEFFECTS,
TK_READONLY,
TK_WRITEONLY,
TK_BUFFER,
TK_STRUCT,
TK_LAYOUT,
TK_HIGHP,
TK_MEDIUMP,
TK_LOWP,
TK_ES3,
TK_THREADGROUP,
TK_RESERVED,
TK_IDENTIFIER,
TK_DIRECTIVE,
TK_LPAREN,
TK_RPAREN,
TK_LBRACE,
TK_RBRACE,
TK_LBRACKET,
TK_RBRACKET,
TK_DOT,
TK_COMMA,
TK_PLUSPLUS,
TK_MINUSMINUS,
TK_PLUS,
TK_MINUS,
TK_STAR,
TK_SLASH,
TK_PERCENT,
TK_SHL,
TK_SHR,
TK_BITWISEOR,
TK_BITWISEXOR,
TK_BITWISEAND,
TK_BITWISENOT,
TK_LOGICALOR,
TK_LOGICALXOR,
TK_LOGICALAND,
TK_LOGICALNOT,
TK_QUESTION,
TK_COLON,
TK_EQ,
TK_EQEQ,
TK_NEQ,
TK_GT,
TK_LT,
TK_GTEQ,
TK_LTEQ,
TK_PLUSEQ,
TK_MINUSEQ,
TK_STAREQ,
TK_SLASHEQ,
TK_PERCENTEQ,
TK_SHLEQ,
TK_SHREQ,
TK_BITWISEOREQ,
TK_BITWISEXOREQ,
TK_BITWISEANDEQ,
TK_SEMICOLON,
TK_WHITESPACE,
TK_LINE_COMMENT,
TK_BLOCK_COMMENT,
TK_INVALID,
TK_NONE,
};
Token() {}
Token(Kind kind, int32_t offset, int32_t length)
: fKind(kind)
, fOffset(offset)
, fLength(length) {}
Kind fKind = Kind::TK_NONE;
int32_t fOffset = -1;
int32_t fLength = -1;
};
class Lexer {
public:
void start(std::string_view text) {
fText = text;
fOffset = 0;
}
Token next();
struct Checkpoint {
int32_t fOffset;
};
Checkpoint getCheckpoint() const { return {fOffset}; }
void rewindToCheckpoint(Checkpoint checkpoint) { fOffset = checkpoint.fOffset; }
private:
std::string_view fText;
int32_t fOffset;
};
} // namespace SkSL
#endif