1 # This Python file uses the following encoding: utf-8
3 Created on Jun 16, 2011
7 from abc
import abstractmethod
, ABCMeta
9 class TreeBuilderI(object, metaclass
=ABCMeta
):
10 def __init__(self
, chart
, type, *edges
):
15 def build(self
, working_on
):
16 return self
._build
(working_on
, self
.__chart
, *self
.__edges
)
19 def _build(self
, chart
, *edges
): pass
21 def __eq__(self
, othr
):
22 return self
.__type
== othr
.__type
and self
.__edges
== othr
.__edges
25 return hash((self
.__type
, self
.__edges
))
28 return "%s Tree Builder: %s" % (self
.__type
, self
.__edges
)
31 return "%r Tree Builder: %r" % (self
.__type
, self
.__edges
)
33 class InitialTreeBuilder(TreeBuilderI
):
34 def _build(self
, working_on
, chart
, new_edge
):
35 return frozenset((new_edge
.production().as_tree(),))
37 class PassthroughTreeBuilder(TreeBuilderI
):
38 def _build(self
, working_on
, chart
, edge
):
39 if edge
in working_on
:
42 return chart
.get_trees(edge
, working_on
)