def insert_transitions(self, grammar, fsa, initial, final, tag): def concatenation_build(symbols, grammar, fsa, initial, final, tag): prev = initial for n, symbol in enumerate(symbols): if n + 1 == len(symbols): next = final else: next = fsa.add_state() symbol.insert_transitions(grammar, fsa, prev, next, tag) prev = next tag = Utilities.nvl(tag, ()) for concatenation in self.__fsot: concatenation_build(concatenation, grammar, fsa, initial, final, tag)
def insert_transitions(self, grammar, fsa, initial, final, tag): tag = Utilities.nvl(tag, ()) rhs = grammar[self.reference] rhs.insert_transitions(grammar, fsa, initial, final, tag + (self.reference,))