|
| 1 | +from warnings import warn |
| 2 | +from copy import deepcopy |
| 3 | + |
| 4 | +from .utils import Serialize |
| 5 | +from .lexer import TerminalDef |
| 6 | + |
| 7 | +###{standalone |
| 8 | + |
| 9 | + |
| 10 | +class LexerConf(Serialize): |
| 11 | + __serialize_fields__ = 'terminals', 'ignore', 'g_regex_flags', 'use_bytes', 'lexer_type' |
| 12 | + __serialize_namespace__ = TerminalDef, |
| 13 | + |
| 14 | + def __init__(self, terminals, re_module, ignore=(), postlex=None, callbacks=None, g_regex_flags=0, skip_validation=False, use_bytes=False): |
| 15 | + self.terminals = terminals |
| 16 | + self.terminals_by_name = {t.name: t for t in self.terminals} |
| 17 | + assert len(self.terminals) == len(self.terminals_by_name) |
| 18 | + self.ignore = ignore |
| 19 | + self.postlex = postlex |
| 20 | + self.callbacks = callbacks or {} |
| 21 | + self.g_regex_flags = g_regex_flags |
| 22 | + self.re_module = re_module |
| 23 | + self.skip_validation = skip_validation |
| 24 | + self.use_bytes = use_bytes |
| 25 | + self.lexer_type = None |
| 26 | + |
| 27 | + @property |
| 28 | + def tokens(self): |
| 29 | + warn("LexerConf.tokens is deprecated. Use LexerConf.terminals instead", DeprecationWarning) |
| 30 | + return self.terminals |
| 31 | + |
| 32 | + def _deserialize(self): |
| 33 | + self.terminals_by_name = {t.name: t for t in self.terminals} |
| 34 | + |
| 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 | + |
| 47 | + |
| 48 | +class ParserConf(Serialize): |
| 49 | + __serialize_fields__ = 'rules', 'start', 'parser_type' |
| 50 | + |
| 51 | + def __init__(self, rules, callbacks, start): |
| 52 | + assert isinstance(start, list) |
| 53 | + self.rules = rules |
| 54 | + self.callbacks = callbacks |
| 55 | + self.start = start |
| 56 | + |
| 57 | + self.parser_type = None |
| 58 | + |
| 59 | +###} |
0 commit comments