• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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