1/*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef OHOS_IDL_TOKEN_H
17#define OHOS_IDL_TOKEN_H
18
19#include <string>
20
21namespace OHOS {
22namespace Idl {
23enum class TokenType {
24    UNKNOWN = 0,
25    // types
26    VOID,    // "void"
27    BOOLEAN, // "boolean"
28    BYTE,    // "byte"
29    SHORT,   // "short"
30    INT,     // "int"
31    LONG,    // "long"
32    STRING,  // "std::string"
33    STRING16, // "std::string16"
34    FLOAT,   // "float"
35    DOUBLE,  // "double"
36    FD,      // "FileDescriptor"
37    ASHMEM,  // "Ashmem"
38    NATIVE_BUFFER, // "NativeBuffer"
39    POINTER, // "Pointer"
40    LIST,    // "List"
41    MAP,     // "Map"
42    SMQ,     // "SharedMemQueue"
43    CHAR,    // "char"
44    // qualifier
45    UNSIGNED, // "unsigned"
46    // custom types
47    ENUM,   // "enum"
48    STRUCT, // "struct"
49    UNION,  // "union"
50    // keywords
51    PACKAGE,              // "package"
52    INTERFACE_TOKEN,      // "interface_token"
53    SUPPORT_DELEGATOR,    // "support_delegator"
54    SEQ,                  // "sequenceable"
55    IMPORT,               // "import"
56    INTERFACE,            // "interface"
57    EXTENDS,              // "extends"
58    ONEWAY,               // "oneway"
59    CALLBACK,             // "callback"
60    FREEZECONTROL,        // "freezecontrol"
61    FULL,                 // "full"
62    LITE,                 // "lite"
63    MINI,                 // "mini"
64    CACHEABLE,            // "cacheable"
65    IN,                   // "in"
66    OUT,                  // "out"
67    INOUT,                // "inout"
68    DOT,                  // "."
69    COMMA,                // ","
70    COLON,                // ":"
71    ASSIGN,               // "="
72    SEMICOLON,            // ";"
73    BRACES_LEFT,          // "{"
74    BRACES_RIGHT,         // "}"
75    BRACKETS_LEFT,        // "["
76    BRACKETS_RIGHT,       // "]"
77    PARENTHESES_LEFT,     // "("
78    PARENTHESES_RIGHT,    // ")"
79    ANGLE_BRACKETS_LEFT,  // "<"
80    ANGLE_BRACKETS_RIGHT, // ">"
81    ADD,                  // "+"
82    SUB,                  // "-"
83    STAR,                 // "*"
84    SLASH,                // "/"
85    PERCENT_SIGN,         // "%""
86    LEFT_SHIFT,           // "<<"
87    RIGHT_SHIFT,          // ">>"
88    AND,                  // "&"
89    XOR,                  // "^"
90    OR,                   // "|"
91    TILDE,                // "~"
92    PPLUS,                // "++"
93    MMINUS,               // "--"
94
95    // others
96    ID,
97    NUM,
98    COMMENT_BLOCK,
99    COMMENT_LINE,
100    END_OF_FILE,
101};
102
103struct Location {
104    std::string filePath;
105    size_t row;
106    size_t col;
107};
108
109struct Token {
110    TokenType kind;
111    Location location;
112    std::string value;
113
114    std::string Dump();
115};
116
117struct TokenTypeCompare {
118    bool operator()(const Token &lhs, const Token &rhs) const
119    {
120        return lhs.kind > rhs.kind;
121    }
122};
123
124std::string LocInfo(const Token &token);
125} // namespace Idl
126} // namespace OHOS
127
128#endif // OHOS_IDL_TOKEN_H