This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 

69 líneas
2.2 KiB

  1. from copy import deepcopy
  2. from types import ModuleType
  3. from typing import Callable, Collection, Dict, Optional, TYPE_CHECKING
  4. if TYPE_CHECKING:
  5. from .lark import PostLex
  6. from .utils import Serialize
  7. from .lexer import TerminalDef, Token
  8. ###{standalone
  9. _Callback = Callable[[Token], Token]
  10. class LexerConf(Serialize):
  11. __serialize_fields__ = 'terminals', 'ignore', 'g_regex_flags', 'use_bytes', 'lexer_type'
  12. __serialize_namespace__ = TerminalDef,
  13. terminals: Collection[TerminalDef]
  14. re_module: ModuleType
  15. ignore: Collection[str]
  16. postlex: 'Optional[PostLex]'
  17. callbacks: Dict[str, _Callback]
  18. g_regex_flags: int
  19. skip_validation: bool
  20. use_bytes: bool
  21. def __init__(self, terminals: Collection[TerminalDef], re_module: ModuleType, ignore: Collection[str]=(), postlex: 'Optional[PostLex]'=None, callbacks: Optional[Dict[str, _Callback]]=None, g_regex_flags: int=0, skip_validation: bool=False, use_bytes: bool=False):
  22. self.terminals = terminals
  23. self.terminals_by_name = {t.name: t for t in self.terminals}
  24. assert len(self.terminals) == len(self.terminals_by_name)
  25. self.ignore = ignore
  26. self.postlex = postlex
  27. self.callbacks = callbacks or {}
  28. self.g_regex_flags = g_regex_flags
  29. self.re_module = re_module
  30. self.skip_validation = skip_validation
  31. self.use_bytes = use_bytes
  32. self.lexer_type = None
  33. def _deserialize(self):
  34. self.terminals_by_name = {t.name: t for t in self.terminals}
  35. def __deepcopy__(self, memo=None):
  36. return type(self)(
  37. deepcopy(self.terminals, memo),
  38. self.re_module,
  39. deepcopy(self.ignore, memo),
  40. deepcopy(self.postlex, memo),
  41. deepcopy(self.callbacks, memo),
  42. deepcopy(self.g_regex_flags, memo),
  43. deepcopy(self.skip_validation, memo),
  44. deepcopy(self.use_bytes, memo),
  45. )
  46. class ParserConf(Serialize):
  47. __serialize_fields__ = 'rules', 'start', 'parser_type'
  48. def __init__(self, rules, callbacks, start):
  49. assert isinstance(start, list)
  50. self.rules = rules
  51. self.callbacks = callbacks
  52. self.start = start
  53. self.parser_type = None
  54. ###}