This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.9 KiB

  1. # -*- coding: utf-8 -*-
  2. from typing import (
  3. TypeVar, Type, List, Dict, IO, Iterator, Callable, Union, Optional,
  4. Literal, Protocol,
  5. )
  6. from .visitors import Transformer
  7. from .lexer import Token, Lexer, TerminalDef
  8. from .tree import Tree
  9. _T = TypeVar('_T')
  10. _Start = Union[None, str, List[str]]
  11. _Parser = Literal["earley", "lalr", "cyk"]
  12. _Lexer = Union[Literal["auto", "standard", "contextual", "dynamic", "dynamic_complete"], Lexer]
  13. _Ambiguity = Literal["explicit", "resolve"]
  14. class PostLex(Protocol):
  15. def process(self, stream: Iterator[Token]) -> Iterator[Token]:
  16. ...
  17. class LarkOptions:
  18. start: _Start
  19. parser: _Parser
  20. lexer: _Lexer
  21. transformer: Optional[Transformer]
  22. postlex: Optional[PostLex]
  23. ambiguity: _Ambiguity
  24. debug: bool
  25. keep_all_tokens: bool
  26. propagate_positions: bool
  27. maybe_placeholders: bool
  28. lexer_callbacks: Dict[str, Callable[[Token], Token]]
  29. cache_grammar: bool
  30. g_regex_flags: int
  31. class Lark:
  32. source: str
  33. options: LarkOptions
  34. lexer: Lexer
  35. terminals: List[TerminalDef]
  36. def __init__(
  37. self,
  38. grammar: Union[str, IO[str]],
  39. *,
  40. start: _Start = ...,
  41. parser: _Parser = ...,
  42. lexer: _Lexer = ...,
  43. transformer: Optional[Transformer] = None,
  44. postlex: Optional[PostLex] = None,
  45. ambiguity: _Ambiguity = ...,
  46. debug: bool = False,
  47. keep_all_tokens: bool = False,
  48. propagate_positions: bool = False,
  49. maybe_placeholders: bool = False,
  50. lexer_callbacks: Optional[Dict[str, Callable[[Token], Token]]] = None,
  51. g_regex_flags: int = ...
  52. ):
  53. ...
  54. def parse(self, text: str, start: _Start = None) -> Tree:
  55. ...
  56. @classmethod
  57. def open(cls: Type[_T], grammar_filename: str, rel_to: Optional[str] = None, **options) -> _T:
  58. ...
  59. def lex(self, text: str) -> Iterator[Token]:
  60. ...
  61. def get_terminal(self, name: str) -> TerminalDef:
  62. ...