|
|
@@ -38,23 +38,26 @@ class MakeParsingFrontend: |
|
|
|
parser_conf.parser_type = self.parser_type |
|
|
|
lexer_conf.lexer_type = self.lexer_type |
|
|
|
return ParsingFrontend(lexer_conf, parser_conf, options) |
|
|
|
|
|
|
|
|
|
|
|
@classmethod |
|
|
|
def deserialize(cls, data, memo, callbacks, options): |
|
|
|
lexer_conf = LexerConf.deserialize(data['lexer_conf'], memo) |
|
|
|
parser_conf = ParserConf.deserialize(data['parser_conf'], memo) |
|
|
|
parser = LALR_Parser.deserialize(data['parser'], memo, callbacks, options.debug) |
|
|
|
parser_conf.callbacks = callbacks |
|
|
|
|
|
|
|
def deserialize_lexer_conf(cls, data, memo, options): |
|
|
|
# We need lexer_conf earley to have the terminals that we need to produce the callback list for paser_conf |
|
|
|
# So we split deserialize into two methods |
|
|
|
terminals = [item for item in memo.values() if isinstance(item, TerminalDef)] |
|
|
|
|
|
|
|
lexer_conf = LexerConf.deserialize(data['lexer_conf'], memo) |
|
|
|
lexer_conf.callbacks = _get_lexer_callbacks(options.transformer, terminals) |
|
|
|
lexer_conf.re_module = regex if options.regex else re |
|
|
|
lexer_conf.use_bytes = options.use_bytes |
|
|
|
lexer_conf.g_regex_flags = options.g_regex_flags |
|
|
|
lexer_conf.skip_validation = True |
|
|
|
lexer_conf.postlex = options.postlex |
|
|
|
return lexer_conf |
|
|
|
|
|
|
|
@classmethod |
|
|
|
def deserialize(cls, data, memo, lexer_conf, callbacks, options): |
|
|
|
parser_conf = ParserConf.deserialize(data['parser_conf'], memo) |
|
|
|
parser = LALR_Parser.deserialize(data['parser'], memo, callbacks, options.debug) |
|
|
|
parser_conf.callbacks = callbacks |
|
|
|
return ParsingFrontend(lexer_conf, parser_conf, options, parser=parser) |
|
|
|
|
|
|
|
|
|
|
|