def parse(self, rules, file, dumpLine=False, defaultRule=None): self.parseContext.rules = rules_to_dict(rules, defaultRule) with LineParser(file) as lines: defaultIdSize = 1 # the first line is not allowed to be comment line or empty but must be the header if hasattr(self, "parseHeader"): try: self.parseHeader(next(lines)) except ParseError as e: e.line = lines.iter.getLine() raise e except StopIteration: raise ParseError("Expected Header.") for words in lines: if dumpLine: print( "line %03d: %s" % (lines.iter.getLine(), lines.iter.getLineText().rstrip())) ruleId = self.getRuleId(words) if ruleId is not None: try: rule = self.parseContext.rules[ruleId] except KeyError as e: rule = self.parseContext.rules.get("", None) if rule is not None: words.putback(ruleId) else: raise ValueError("Unsupported rule '%s'" % (ruleId)) step = rule.parse(words, self.parseContext.context) step.lineInFile = lines.iter.getLine() yield step self.parseContext = step.newParseContext(self.parseContext) numConstraints = step.numConstraints() if numConstraints > 0: oldFree = self.parseContext.firstFreeId newFree = oldFree + numConstraints self.parseContext.firstFreeId = newFree for listener in self.parseContext.addIneqListener: listener(range(oldFree, newFree), self.parseContext.context)
def allowedRules(self, context, currentRules): return rules_to_dict(self.subRules)
def allowedRules(self, context, currentRules): self.subContext.previousRules = currentRules return rules_to_dict(self.subRules)
def allowedRules(self, context, currentRules): if not self.autoProoved: self.subContext.previousRules = currentRules return rules_to_dict(self.subRules) else: return currentRules