def load(self): from grammar_parser.bootstrap import BootstrapParser from jsonmanager import JsonManager if _cache.has_key(self.name + "::parser"): root, language, whitespaces = _cache[self.name + "::json"] # parse rules as they are needed by the incremental parser to # detect comments manager = JsonManager(unescape=True) root, language, whitespaces = manager.load(self.filename)[0] pickle_id = hash(self) bootstrap = BootstrapParser(lr_type=1, whitespaces=whitespaces) bootstrap.ast = root bootstrap.parse_rules(root.children[1].children[1].children[0]) pickle_id, whitespace = _cache[self.name + "::parser"] from incparser.incparser import IncParser incparser = IncParser() incparser.from_dict(bootstrap.rules, None, None, whitespace, pickle_id, None) incparser.init_ast() inclexer = _cache[self.name + "::lexer"] incparser.lexer = inclexer # give parser a reference to its lexer (needed for multiline comments) return (incparser, inclexer) else: manager = JsonManager(unescape=True) root, language, whitespaces = manager.load(self.filename)[0] pickle_id = hash(self) bootstrap = BootstrapParser(lr_type=1, whitespaces=whitespaces) bootstrap.ast = root bootstrap.extra_alternatives = self.alts bootstrap.change_startrule = self.extract bootstrap.read_options() bootstrap.parse_both() bootstrap.create_parser(pickle_id) bootstrap.create_lexer() whitespace = bootstrap.implicit_ws() _cache[self.name + "::lexer"] = bootstrap.inclexer _cache[self.name + "::json"] = (root, language, whitespaces) _cache[self.name + "::parser"] = (pickle_id, whitespace) bootstrap.incparser.lexer = bootstrap.inclexer return (bootstrap.incparser, bootstrap.inclexer)
def load(self, buildlexer=True): from grammar_parser.bootstrap import BootstrapParser from jsonmanager import JsonManager from incparser.incparser import IncParser if self.name + "::parser" in _cache: syntaxtable, whitespaces = _cache[self.name + "::parser"] incparser = IncParser() incparser.syntaxtable = syntaxtable incparser.whitespaces = whitespaces incparser.init_ast() incparser.lang = self.name inclexer = _cache[self.name + "::lexer"] incparser.lexer = inclexer # give parser a reference to its lexer (needed for multiline comments) incparser.previous_version.parent.name = self.name return (incparser, inclexer) else: manager = JsonManager(unescape=True) root, language, whitespaces = manager.load(self.filename)[0] bootstrap = BootstrapParser(lr_type=1, whitespaces=whitespaces) bootstrap.ast = root bootstrap.extra_alternatives = self.alts bootstrap.change_startrule = self.extract bootstrap.read_options() whitespace = bootstrap.implicit_ws() pickle_id = self.pickleid(whitespace) bootstrap.parse_both() bootstrap.create_parser(pickle_id) bootstrap.create_lexer(buildlexer) _cache[self.name + "::lexer"] = bootstrap.inclexer _cache[self.name + "::json"] = (root, language, whitespaces) _cache[self.name + "::parser"] = (bootstrap.incparser.syntaxtable, whitespace) bootstrap.incparser.lang = self.name bootstrap.incparser.previous_version.parent.name = self.name bootstrap.incparser.lexer = bootstrap.inclexer return (bootstrap.incparser, bootstrap.inclexer)