# -*- coding: utf-8 -*- from types import ModuleType from typing import ( TypeVar, Type, Tuple, List, Dict, Iterator, Collection, Callable, Optional, Pattern as REPattern, ) from abc import abstractmethod, ABC _T = TypeVar('_T') class Pattern(ABC): value: str flags: Collection[str] def __init__(self, value: str, flags: Collection[str] = ...): ... @property @abstractmethod def type(self) -> str: ... @abstractmethod def to_regexp(self) -> str: ... @property @abstractmethod def min_width(self) -> int: ... @property @abstractmethod def max_width(self) -> int: ... class PatternStr(Pattern): type: str = ... def to_regexp(self) -> str: ... @property def min_width(self) -> int: ... @property def max_width(self) -> int: ... class PatternRE(Pattern): type: str = ... def to_regexp(self) -> str: ... @property def min_width(self) -> int: ... @property def max_width(self) -> int: ... class TerminalDef: name: str pattern: Pattern priority: int def __init__(self, name: str, pattern: Pattern, priority: int = ...): ... class Token(str): type: str pos_in_stream: int value: str line: int column: int end_line: int end_column: int end_pos: int def update(self, type_: Optional[str] = None, value: Optional[str] = None) -> Token: ... @classmethod def new_borrow_pos(cls: Type[_T], type_: str, value: str, borrow_t: Token) -> _T: ... _Callback = Callable[[Token], Token] class Lexer(ABC): lex: Callable[..., Iterator[Token]] class TraditionalLexer(Lexer): terminals: Collection[TerminalDef] ignore_types: List[str] newline_types: List[str] user_callbacks: Dict[str, _Callback] callback: Dict[str, _Callback] mres: List[Tuple[REPattern, Dict[int, str]]] re: ModuleType def __init__( self, terminals: Collection[TerminalDef], re_: ModuleType, ignore: Collection[str] = ..., user_callbacks: Dict[str, _Callback] = ..., g_regex_flags: int = ... ): ... def build(self) -> None: ... def match(self, stream: str, pos: int) -> Optional[Tuple[str, str]]: ... def lex(self, stream: str) -> Iterator[Token]: ... class ContextualLexer(Lexer): lexers: Dict[str, TraditionalLexer] root_lexer: TraditionalLexer def __init__( self, terminals: Collection[TerminalDef], states: Dict[str, Collection[str]], re_: ModuleType, ignore: Collection[str] = ..., always_accept: Collection[str] = ..., user_callbacks: Dict[str, _Callback] = ..., g_regex_flags: int = ... ): ... def lex(self, stream: str, get_parser_state: Callable[[], str]) -> Iterator[Token]: ...