import re snake_case_pattern = re.compile(r'(?>"], ["FirstMul = TK_Mul", "SPECIAL"], ["LastMul = TK_RightShift", "SPECIAL"], ["Add", "+"], ["Sub", "-"], ["FirstAdd = TK_Add", "SPECIAL"], ["LastAdd = TK_Sub", "SPECIAL"], ["Equals", "=="], ["LesserThenOrEqual", "<="], ["GreaterThenOrEqual", ">="], ["LesserThen", "<"], ["GreaterThen", ">"], ["NotEquals", "!="], ["FirstCompare = TK_Equals", "SPECIAL"], ["LastCompare = TK_NotEquals", "SPECIAL"], ["BitAnd", "&"], ["BitOr", "|"], ["BitXor", "^"], ["And", "&&"], ["Or", "||"], ["FirstLogical = TK_BitAnd", "SPECIAL"], ["LastLogical = TK_Or", "SPECIAL"], ["Neg", "~"], ["Not", "!"], ["Decrement", "--"], ["Increment", "++"], ["PostDecrement", "--"], ["PostIncrement", "++"], ] token_assign_expr = [ ["Assign", "="], ["ColonAssign", ":="], ["DivAssign", "/="], ["MulAssign", "*="], ["ModAssign", "%="], ["SubAssign", "-="], ["AddAssign", "+="], ["AndAssign", "&="], ["OrAssign", "|="], ["XorAssign", "^="], ["LeftShiftAssign", "<<="], ["RightShiftAssign", ">>="], ["FirstAssign = TK_Assign", "SPECIAL"], ["LastAssign = TK_RightShiftAssign", "SPECIAL"], ] token_rest = [ ["TK_OpenParen", "("], ["TK_CloseParen", ")"], ["TK_OpenBrace", "{"], ["TK_CloseBrace", "}"], ["TK_OpenBracket", "["], ["TK_CloseBracket", "]"], ["TK_Comma", ","], ["TK_Pound", "#"], ["TK_Question", "?"], ["TK_ThreeDots", "..."], ["TK_Semicolon", ";"], ["TK_Dot", "."], ["TK_TwoDots", ".."], ["TK_NewLine", "[NewLine]"], ["TK_Colon", ":"], ["TK_DoubleColon", "::"], ["TK_At", "@"], ["TK_Arrow", "->"], ["TK_ExprSizeof", "[SizeOf]"], ["TK_DocComment", "[///]"], ["TK_Comment", "//"], ["TK_Identifier", "[Ident]"], ["TK_UnicodeLit", "[Unicode]"], ["TK_StringLit", "[String]"], ["TK_Error", "[Error]"], ["TK_Float", "[Float]"], ["TK_Integer", "[Int]"], ["TK_Keyword", "[Keyword]"], ] token_kinds = token_simple_expr + token_assign_expr + token_rest