Esempio n. 1
0
    def test_alternatives(self):
        self.assert_graphs(
            build(Alternatives()), """digraph {
 0 [label="NoMatch"]
 1 [label="Match"]
 0 -> 1
}""")
        self.assert_graphs(
            build(Alternatives([Sequence([n(1), n(2), n(3)])])), """digraph {
 0 [label="1"]
 1 [label="2"]
 2 [label="3"]
 3 [label="Match"]
 0 -> 1
 1 -> 2
 2 -> 3
}""")
        self.assert_graphs(
            build(
                Alternatives([
                    Sequence([n(1), n(2), n(3)]),
                    Sequence([n(4), n(5)]),
                    Sequence()
                ])), """digraph {
 0 [label="...|..."]
 1 [label="1"]
 2 [label="4"]
 3 [label="Match"]
 4 [label="5"]
 5 [label="2"]
 6 [label="3"]
 0 -> 1
 0 -> 2
 0 -> 3
 2 -> 4
 4 -> 3
 1 -> 5
 5 -> 6
 6 -> 3
}""")
Esempio n. 2
0
    def callback(self, yes_no, terminal):
        '''Callback used by `yesNoBuilder` to accumulate data.'''

        # first callback - have 'yes', possibly terminated by '|'
        if self.__yes is None:
            (self.__yes, yes_no) = (yes_no, None)
            # collect second alternative
            if terminal == '|':
                return YesNoBuilder(self, self._parser_state, self.__parent,
                                    ')')

        # final callback - build yes and no (if present)
        yes = self.__yes.to_sequence()
        no = yes_no.to_sequence() if yes_no else Sequence()
        label = ('...' if yes else '') + ('|...' if no else '')
        if not label:
            label = '|'
        split = lambda label: Conditional(self.__name, label)
        alternatives = Alternatives([no, yes], label=label, split=split)
        self.__parent._sequence.append(alternatives)
        return self.__parent
Esempio n. 3
0
 def __init__(self, parser_state):
     super(SequenceBuilder, self).__init__(parser_state)
     self._alternatives = Alternatives()
     self._sequence = Sequence()