|
- # -*- coding: utf-8 -*-
- from types import ModuleType
- from typing import (
- TypeVar, Type, Tuple, List, Dict, Iterator, Collection, Callable, Optional, FrozenSet, Any,
- Pattern as REPattern,
- )
- from abc import abstractmethod, ABC
-
- _T = TypeVar('_T')
-
-
- class Pattern(ABC):
- value: str
- flags: Collection[str]
- raw: 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 = ...):
- ...
-
- def user_repr(self) -> str: ...
-
-
- class Token(str):
- type: str
- pos_in_stream: int
- value: Any
- line: int
- column: int
- end_line: int
- end_column: int
- end_pos: int
-
- def __init__(self, type_: str, value: Any, pos_in_stream: int = None, line: int = None, column: int = None, end_line: int = None, end_column: int = None, end_pos: int = None):
- ...
-
- def update(self, type_: Optional[str] = None, value: Optional[Any] = None) -> Token:
- ...
-
- @classmethod
- def new_borrow_pos(cls: Type[_T], type_: str, value: Any, borrow_t: Token) -> _T:
- ...
-
-
- _Callback = Callable[[Token], Token]
-
-
- class Lexer(ABC):
- lex: Callable[..., Iterator[Token]]
-
-
- class LexerConf:
- tokens: Collection[TerminalDef]
- re_module: ModuleType
- ignore: Collection[str] = ()
- postlex: Any =None
- callbacks: Optional[Dict[str, _Callback]] = None
- g_regex_flags: int = 0
- skip_validation: bool = False
- use_bytes: bool = False
-
-
-
- class TraditionalLexer(Lexer):
- terminals: Collection[TerminalDef]
- ignore_types: FrozenSet[str]
- newline_types: FrozenSet[str]
- user_callbacks: Dict[str, _Callback]
- callback: Dict[str, _Callback]
- mres: List[Tuple[REPattern, Dict[int, str]]]
- re: ModuleType
-
- def __init__(
- self,
- conf: LexerConf
- ):
- ...
-
- def build(self) -> None:
- ...
-
- def match(self, stream: str, pos: int) -> Optional[Tuple[str, str]]:
- ...
-
- def lex(self, stream: str) -> Iterator[Token]:
- ...
-
- def next_token(self, lex_state: Any, parser_state: Any = None) -> 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]:
- ...
|