# -*- coding: utf-8 -*- from typing import ( TypeVar, Type, List, Dict, IO, Iterator, Callable, Union, Optional, Literal, Protocol, ) from .visitors import Transformer from .lexer import Token, Lexer, TerminalDef from .tree import Tree _T = TypeVar('_T') _Start = Union[None, str, List[str]] _Parser = Literal["earley", "lalr", "cyk"] _Lexer = Union[Literal["auto", "standard", "contextual", "dynamic", "dynamic_complete"], Lexer] _Ambiguity = Literal["explicit", "resolve"] class PostLex(Protocol): def process(self, stream: Iterator[Token]) -> Iterator[Token]: ... class LarkOptions: start: _Start parser: _Parser lexer: _Lexer transformer: Optional[Transformer] postlex: Optional[PostLex] ambiguity: _Ambiguity debug: bool keep_all_tokens: bool propagate_positions: bool maybe_placeholders: bool lexer_callbacks: Dict[str, Callable[[Token], Token]] cache_grammar: bool g_regex_flags: int class Lark: source: str options: LarkOptions lexer: Lexer terminals: List[TerminalDef] def __init__( self, grammar: Union[str, IO[str]], *, start: _Start = ..., parser: _Parser = ..., lexer: _Lexer = ..., transformer: Optional[Transformer] = None, postlex: Optional[PostLex] = None, ambiguity: _Ambiguity = ..., debug: bool = False, keep_all_tokens: bool = False, propagate_positions: bool = False, maybe_placeholders: bool = False, lexer_callbacks: Optional[Dict[str, Callable[[Token], Token]]] = None, g_regex_flags: int = ... ): ... def parse(self, text: str, start: _Start = None) -> Tree: ... @classmethod def open(cls: Type[_T], grammar_filename: str, rel_to: Optional[str] = None, **options) -> _T: ... def lex(self, text: str) -> Iterator[Token]: ... def get_terminal(self, name: str) -> TerminalDef: ...