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 = [ ["OpenParen", "("], ["CloseParen", ")"], ["OpenBrace", "{"], ["CloseBrace", "}"], ["OpenBracket", "["], ["CloseBracket", "]"], ["Comma", ","], ["Pound", "#"], ["Question", "?"], ["ThreeDots", "..."], ["Semicolon", ";"], ["Dot", "."], ["TwoDots", ".."], ["NewLine", "[NewLine]"], ["Colon", ":"], ["DoubleColon", "::"], ["At", "@"], ["Arrow", "->"], ["ExprSizeof", "[SizeOf]"], ["DocComment", "[///]"], ["Comment", "//"], ["Identifier", "[Ident]"], ["UnicodeLit", "[Unicode]"], ["StringLit", "[String]"], ["Error", "[Error]"], ["Float", "[Float]"], ["Integer", "[Int]"], ["Keyword", "[Keyword]"], ] token_kinds = token_simple_expr + token_assign_expr + token_rest keywords = [ "struct", "union", "true", "default", "break", "false", "return", "switch", "Assert", "if", "elif", "pass", "else", "for", "enum", ] interns = [ "SizeOf", "Length", "AlignOf", "foreign", "strict", "void", "flag", "it", ]