1 //===- TokenManager.h - Manage Tokens for syntax-tree ------------*- C++-*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // Defines Token interfaces for the clang syntax-tree. This is the level of 10 // abstraction that the syntax-tree uses to operate on Token. 11 // 12 // TokenManager decouples the syntax-tree from a particular token 13 // implementation. For example, a TokenBuffer captured from a clang parser may 14 // track macro expansions and associate tokens with clang's SourceManager, while 15 // a clang pseudoparser would use a flat array of raw-lexed tokens in memory. 16 // 17 //===----------------------------------------------------------------------===// 18 19 #ifndef LLVM_CLANG_TOOLING_SYNTAX_TOKEN_MANAGER_H 20 #define LLVM_CLANG_TOOLING_SYNTAX_TOKEN_MANAGER_H 21 22 #include "llvm/ADT/StringRef.h" 23 #include <cstdint> 24 25 namespace clang { 26 namespace syntax { 27 28 /// Defines interfaces for operating "Token" in the clang syntax-tree. 29 class TokenManager { 30 public: 31 virtual ~TokenManager() = default; 32 33 /// Describes what the exact class kind of the TokenManager is. 34 virtual llvm::StringLiteral kind() const = 0; 35 36 /// A key to identify a specific token. The token concept depends on the 37 /// underlying implementation -- it can be a spelled token from the original 38 /// source file or an expanded token. 39 /// The syntax-tree Leaf node holds a Key. 40 using Key = uintptr_t; 41 virtual llvm::StringRef getText(Key K) const = 0; 42 }; 43 44 } // namespace syntax 45 } // namespace clang 46 47 #endif // LLVM_CLANG_TOOLING_SYNTAX_TOKEN_MANAGER_H 48