/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
*
* HDF is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
#ifndef OHOS_HDI_TOKEN_H
#define OHOS_HDI_TOKEN_H
#include <util/string.h>
namespace OHOS {
namespace HDI {
enum class TokenType {
UNKNOWN = 0,
// types
VOID,
BOOLEAN, // "boolean"
BYTE, // "byte"
SHORT, // "short"
INT, // "int"
LONG, // "long"
STRING, // "String"
FLOAT, // "float"
DOUBLE, // "double"
FD, // "FileDescriptor"
ASHMEM, // "Ashmem"
LIST, // "List"
MAP, // "Map"
SMQ, // "SharedMemQueue"
CHAR, // "char"
// qualifier
UNSIGNED, // "unsigned"
// custom types
ENUM, // "enum"
STRUCT, // "struct"
UNION, // "union"
// keywords
PACKAGE, // "package"
SEQ, // "sequenceable"
IMPORT, // "import"
INTERFACE, // "interface"
EXTENDS, // "extends"
ONEWAY, // "oneway"
CALLBACK, // "callback"
FULL, // "full"
LITE, // "lite"
IN, // "in"
OUT, // "out"
DOT, // "."
COMMA, // ","
COLON, // ":"
ASSIGN, // "="
SEMICOLON, // ";"
BRACES_LEFT, // "{"
BRACES_RIGHT, // "}"
BRACKETS_LEFT, // "["
BRACKETS_RIGHT, // "]"
PARENTHESES_LEFT, // "("
PARENTHESES_RIGHT, // ")"
ANGLE_BRACKETS_LEFT, // "<"
ANGLE_BRACKETS_RIGHT, // ">"
ADD, // "+"
SUB, // "-"
STAR, // "*"
SLASH, // "/"
PERCENT_SIGN, // "%""
LEFT_SHIFT, // "<<"
RIGHT_SHIFT, // ">>"
AND, // "&"
XOR, // "^"
OR, // "|"
TILDE, // "~"
PPLUS, // "++"
MMINUS, // "--"
// others
ID,
NUM,
COMMENT_BLOCK,
COMMENT_LINE,
END_OF_FILE,
};
struct Location {
String filePath_;
size_t row_;
size_t col_;
};
struct Token {
TokenType kind_;
Location location_;
String value_;
String Dump();
};
struct TokenTypeCompare {
bool operator()(const Token &lhs, const Token &rhs)
{
return lhs.kind_ > rhs.kind_;
}
};
String LocInfo(const Token &token);
String TokenTypeToString(TokenType type);
int TokenTypeToChar(TokenType type);
} // namespace HDI
} // namespace OHOS
#endif // OHOS_HDI_TOKEN_H