This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

48 rader
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. ###}