from ast_parser.token import TokenKind def is_digit(code: int) -> bool: """Check if code is a digit. Args: code (int): Unicode code point. Returns: bool: True if code is a digit, False otherwise. """ return 0x0030 <= code <= 0x0039 # def is_coefficient_start(code: int) -> bool: """Check if code is a coefficient start. The Coefficient can start with a digit or a dot. Args: code (int): Unicode code point. Returns: bool: True if code is a Coefficient start, False otherwise. """ return is_digit(code) or code == 0x002E # | `.` def is_lower_alpha(code: int) -> bool: """Check if code is a lowercased alpha. Args: code (int): Unicode code point. Returns: bool: True if code is a lowercased alpha, False otherwise. """ return 0x0061 <= code <= 0x007A # def is_upper_alpha(code: int) -> bool: """Check if code is an uppercased alpha. Args: code (int): Unicode code point. Returns: bool: True if code is an uppercased alpha, False otherwise. """ return 0x0041 <= code <= 0x005A # def is_alpha(code: int) -> bool: """Check if code is an alpha. Args: code (int): Unicode code point. Returns: bool: True if code is an alpha, False otherwise. """ return is_lower_alpha(code) or is_upper_alpha(code) # def is_variable_start(code: int) -> bool: """Check if code is a variable start. The Variable can start with an alpha or an underscore. Args: code (int): Unicode code point. Returns: bool: True if code is a Variable start, False otherwise. """ return is_alpha(code) or code == 0x005F # | `_` def is_variable_continue(code: int) -> bool: """Check if code is a variable continue. The Variable can continue with an alpha, an underscore or a digit. Args: code (int): Unicode code point. Returns: bool: True if code is a Variable continue, False otherwise. """ return is_variable_start(code) or is_digit(code) # | `_` | def is_ascii(code: int) -> bool: """Check if code is an ASCII. Args: code (int): Unicode code point. Returns: bool: True if code is an ASCII, False otherwise. """ return 0x0020 <= code <= 0x007E # def print_char_code(code: int | None) -> str: """Describe code as a character or Unicode code point. Args: code (int | None): Unicode code point. None for EOF. Returns: str: Character or Unicode code point. """ if code is None: # return TokenKind.EOF.value return chr(code) if is_ascii(code) else f"U+{code:04X}" __all__ = ( "is_digit", "is_coefficient_start", "is_lower_alpha", "is_upper_alpha", "is_alpha", "is_variable_start", "is_variable_continue", "is_ascii", "print_char_code", )