# -*- coding: utf-8 -*- from typing import ( TypeVar, Type, List, Dict, IO, Iterator, Callable, Union, Optional, Literal, Protocol, Tuple, Iterable, ) from .parsers.lalr_interactive_parser import InteractiveParser from .visitors import Transformer from .lexer import Token, Lexer, TerminalDef from .tree import Tree from .exceptions import UnexpectedInput from .load_grammar import Grammar _T = TypeVar('_T') class PostLex(Protocol): def process(self, stream: Iterator[Token]) -> Iterator[Token]: ... always_accept: Iterable[str] class LarkOptions: start: List[str] parser: str lexer: str transformer: Optional[Transformer] postlex: Optional[PostLex] ambiguity: str regex: bool debug: bool keep_all_tokens: bool propagate_positions: Union[bool, Callable] maybe_placeholders: bool lexer_callbacks: Dict[str, Callable[[Token], Token]] cache: Union[bool, str] g_regex_flags: int use_bytes: bool import_paths: List[Union[str, Callable[[Union[None, str, PackageResource], str], Tuple[str, str]]]] source_path: Optional[str] class PackageResource(object): pkg_name: str path: str def __init__(self, pkg_name: str, path: str): ... class FromPackageLoader: def __init__(self, pkg_name: str, search_paths: Tuple[str, ...] = ...): ... def __call__(self, base_path: Union[None, str, PackageResource], grammar_path: str) -> Tuple[PackageResource, str]: ... class Lark: source_path: str source_grammar: str grammar: Grammar options: LarkOptions lexer: Lexer terminals: List[TerminalDef] def __init__( self, grammar: Union[Grammar, str, IO[str]], *, start: Union[None, str, List[str]] = "start", parser: Literal["earley", "lalr", "cyk", "auto"] = "auto", lexer: Union[Literal["auto", "standard", "contextual", "dynamic", "dynamic_complete"], Type[Lexer]] = "auto", transformer: Optional[Transformer] = None, postlex: Optional[PostLex] = None, ambiguity: Literal["explicit", "resolve"] = "resolve", regex: bool = False, debug: bool = False, keep_all_tokens: bool = False, propagate_positions: Union[bool, Callable] = False, maybe_placeholders: bool = False, lexer_callbacks: Optional[Dict[str, Callable[[Token], Token]]] = None, cache: Union[bool, str] = False, g_regex_flags: int = ..., use_bytes: bool = False, import_paths: List[Union[str, Callable[[Union[None, str, PackageResource], str], Tuple[str, str]]]] = ..., source_path: Optional[str]=None, ): ... def parse(self, text: str, start: Optional[str] = None, on_error: Callable[[UnexpectedInput], bool] = None) -> Tree: ... def parse_interactive(self, text: str = None, start: Optional[str] = None) -> InteractiveParser: ... @classmethod def open(cls: Type[_T], grammar_filename: str, rel_to: Optional[str] = None, **options) -> _T: ... @classmethod def open_from_package(cls: Type[_T], package: str, grammar_path: str, search_paths: Tuple[str, ...] = ..., **options) -> _T: ... def lex(self, text: str, dont_ignore: bool = False) -> Iterator[Token]: ... def get_terminal(self, name: str) -> TerminalDef: ...