#pragma once #include #include #include "lexer/enum_type.h" using namespace std; namespace ov4 { class T_property { public: int operand_number = 0; bool continuable = true; int pivot_priority = -1; // require: MUST // accept: optional, but if it doesn't accept, but there is indeed a child, then error child_existance_type left; child_existance_type right; enum_token_type enum_type = TEXT; }; inline unordered_map symbol_property = { // non-operator {"\'", {.enum_type = SINGLE_QUOTATION}}, {"\"", {.enum_type = SINGLE_QUOTATION}}, // bracket {"(", {.continuable = false, .enum_type = LEFT_BRACKET}}, {")", {.continuable = false, .enum_type = RIGHT_BRACKET}}, // operator {"&", {.operand_number = 1, .continuable = true, .pivot_priority = 2000, .left = EXIST, .right = NOT_EXIST, .enum_type = ASYNC}}, {"|", {.operand_number = 1, .continuable = true, .pivot_priority = 100, .left = EXIST, .right = EXIST, .enum_type = PIPE}}, {"&&", {.operand_number = 1, .continuable = true, .pivot_priority = 1000, .left = EXIST, .right = EXIST, .enum_type = LOGIC_AND}}, {"||", {.operand_number = 1, .continuable = true, .pivot_priority = 1000, .left = EXIST, .right = EXIST, .enum_type = LOGIC_OR}}, }; string symbol_enum2string(enum_token_type e); bool symbol_contains_enum_type(enum_token_type e); }