| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVELOPER_DEBUG_ZXDB_EXPR_EXPR_TOKEN_H_ |
| #define SRC_DEVELOPER_DEBUG_ZXDB_EXPR_EXPR_TOKEN_H_ |
| |
| #include <string> |
| |
| #include "src/developer/debug/zxdb/expr/expr_token_type.h" |
| |
| namespace zxdb { |
| |
| // A parsed token. This token does not own the strings, it's intended to be used only as an |
| // intermediate representation pointing into the string being parsed. |
| class ExprToken { |
| public: |
| ExprToken() = default; |
| ExprToken(ExprTokenType type, const std::string& value, size_t byte_offset) |
| : type_(type), value_(value), byte_offset_(byte_offset) {} |
| |
| ExprTokenType type() const { return type_; } |
| const std::string& value() const { return value_; } |
| |
| // Offset into the input string where this token begins. |
| size_t byte_offset() const { return byte_offset_; } |
| |
| // Returns true if this token is immediate before the given token with no space between. |
| bool ImmediatelyPrecedes(const ExprToken& second) const { |
| return byte_offset() + value().size() == second.byte_offset(); |
| } |
| |
| private: |
| ExprTokenType type_ = ExprTokenType::kInvalid; |
| std::string value_; |
| size_t byte_offset_ = 0; |
| }; |
| |
| } // namespace zxdb |
| |
| #endif // SRC_DEVELOPER_DEBUG_ZXDB_EXPR_EXPR_TOKEN_H_ |