This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

48 linhas
1.4 KiB

  1. from warnings import warn
  2. from .utils import Serialize
  3. from .lexer import TerminalDef
  4. ###{standalone
  5. class LexerConf(Serialize):
  6. __serialize_fields__ = 'terminals', 'ignore', 'g_regex_flags', 'use_bytes', 'lexer_type'
  7. __serialize_namespace__ = TerminalDef,
  8. def __init__(self, terminals, re_module, ignore=(), postlex=None, callbacks=None, g_regex_flags=0, skip_validation=False, use_bytes=False):
  9. self.terminals = terminals
  10. self.terminals_by_name = {t.name: t for t in self.terminals}
  11. assert len(self.terminals) == len(self.terminals_by_name)
  12. self.ignore = ignore
  13. self.postlex = postlex
  14. self.callbacks = callbacks or {}
  15. self.g_regex_flags = g_regex_flags
  16. self.re_module = re_module
  17. self.skip_validation = skip_validation
  18. self.use_bytes = use_bytes
  19. self.lexer_type = None
  20. @property
  21. def tokens(self):
  22. warn("LexerConf.tokens is deprecated. Use LexerConf.terminals instead", DeprecationWarning)
  23. return self.terminals
  24. def _deserialize(self):
  25. self.terminals_by_name = {t.name: t for t in self.terminals}
  26. class ParserConf(Serialize):
  27. __serialize_fields__ = 'rules', 'start', 'parser_type'
  28. def __init__(self, rules, callbacks, start):
  29. assert isinstance(start, list)
  30. self.rules = rules
  31. self.callbacks = callbacks
  32. self.start = start
  33. self.parser_type = None
  34. ###}