Add a rule to the RuleSet. Parameters ---------- rule : RewriteRule
(self, rule)
| 254 | self.add(p) |
| 255 | |
| 256 | def add(self, rule): |
| 257 | """Add a rule to the RuleSet. |
| 258 | |
| 259 | Parameters |
| 260 | ---------- |
| 261 | rule : RewriteRule |
| 262 | """ |
| 263 | |
| 264 | if not isinstance(rule, RewriteRule): |
| 265 | raise TypeError("rule must be instance of RewriteRule") |
| 266 | vars = rule.vars |
| 267 | curr_node = self._net |
| 268 | ind = len(self.rules) |
| 269 | # List of variables, in order they appear in the POT of the term |
| 270 | for t in Traverser(rule.lhs): |
| 271 | prev_node = curr_node |
| 272 | if t in vars: |
| 273 | t = VAR |
| 274 | if t in curr_node.edges: |
| 275 | curr_node = curr_node.edges[t] |
| 276 | else: |
| 277 | curr_node.edges[t] = Node() |
| 278 | curr_node = curr_node.edges[t] |
| 279 | # We've reached a leaf node. Add the term index to this leaf. |
| 280 | prev_node.edges[t].patterns.append(ind) |
| 281 | self.rules.append(rule) |
| 282 | |
| 283 | def iter_matches(self, term): |
| 284 | """A generator that lazily finds matchings for term from the RuleSet. |
no test coverage detected