This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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