1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * 4 * HDF is dual licensed: you can use it either under the terms of 5 * the GPL, or the BSD license, at your option. 6 * See the LICENSE file in the root of this repository for complete details. 7 */ 8 9 #ifndef OHOS_HDI_TOKEN_H 10 #define OHOS_HDI_TOKEN_H 11 12 #include <string> 13 14 namespace OHOS { 15 namespace HDI { 16 enum class TokenType { 17 UNKNOWN = 0, 18 // types 19 VOID, 20 BOOLEAN, // "boolean" 21 BYTE, // "byte" 22 SHORT, // "short" 23 INT, // "int" 24 LONG, // "long" 25 STRING, // "std::string" 26 FLOAT, // "float" 27 DOUBLE, // "double" 28 FD, // "FileDescriptor" 29 ASHMEM, // "Ashmem" 30 BUFFER_HANDLE, // "BufferHandle" 31 LIST, // "List" 32 MAP, // "Map" 33 SMQ, // "SharedMemQueue" 34 CHAR, // "char" 35 // qualifier 36 UNSIGNED, // "unsigned" 37 // custom types 38 ENUM, // "enum" 39 STRUCT, // "struct" 40 UNION, // "union" 41 // keywords 42 PACKAGE, // "package" 43 SEQ, // "sequenceable" 44 IMPORT, // "import" 45 INTERFACE, // "interface" 46 EXTENDS, // "extends" 47 ONEWAY, // "oneway" 48 CALLBACK, // "callback" 49 FULL, // "full" 50 LITE, // "lite" 51 IN, // "in" 52 OUT, // "out" 53 DOT, // "." 54 COMMA, // "," 55 COLON, // ":" 56 ASSIGN, // "=" 57 SEMICOLON, // ";" 58 BRACES_LEFT, // "{" 59 BRACES_RIGHT, // "}" 60 BRACKETS_LEFT, // "[" 61 BRACKETS_RIGHT, // "]" 62 PARENTHESES_LEFT, // "(" 63 PARENTHESES_RIGHT, // ")" 64 ANGLE_BRACKETS_LEFT, // "<" 65 ANGLE_BRACKETS_RIGHT, // ">" 66 ADD, // "+" 67 SUB, // "-" 68 STAR, // "*" 69 SLASH, // "/" 70 PERCENT_SIGN, // "%"" 71 LEFT_SHIFT, // "<<" 72 RIGHT_SHIFT, // ">>" 73 AND, // "&" 74 XOR, // "^" 75 OR, // "|" 76 TILDE, // "~" 77 PPLUS, // "++" 78 MMINUS, // "--" 79 80 // others 81 ID, 82 NUM, 83 COMMENT_BLOCK, 84 COMMENT_LINE, 85 END_OF_FILE, 86 }; 87 88 struct Location { 89 std::string filePath_; 90 size_t row_; 91 size_t col_; 92 }; 93 94 struct Token { 95 TokenType kind_; 96 Location location_; 97 std::string value_; 98 99 std::string Dump(); 100 }; 101 102 struct TokenTypeCompare { operatorTokenTypeCompare103 bool operator()(const Token &lhs, const Token &rhs) 104 { 105 return lhs.kind_ > rhs.kind_; 106 } 107 }; 108 109 std::string LocInfo(const Token &token); 110 } // namespace HDI 111 } // namespace OHOS 112 113 #endif // OHOS_HDI_TOKEN_H