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