automata icon indicating copy to clipboard operation
automata copied to clipboard

No support for epsilon stack moves in PDAs

Open Muon opened this issue 1 year ago • 2 comments

The way Sipser's textbook defines PDAs, they can have epsilon stack moves. So for example "a, eps -> x" says "read a, push x" and "a, eps -> eps" says just "read a". These are compatible with the Hopcroft and Ullman definition which is used here. (Just a slight extension!) Could support for them please be added? Sipser's textbook is very popular and I just had to post this workaround to my class:

def fill_in_epsilon_stack_moves(stack_alphabet, table):
    """Convert a Sipser-style transition table to a Hopcroft-Ullman-style transition table.

    Table is modified in-place, and returned from this function."""
    for f in table.values():
        for g in f.values():
            if '' not in g:
                continue
            for b in stack_alphabet:
                new_transitions = set()
                for (q, s) in g['']:
                    if s == '':
                        new_transitions.add((q, b))
                    else:
                        new_transitions.add((q, (s, b)))
                if b in g:
                    g[b] |= new_transitions
                else:
                    g[b] = new_transitions
            del g['']
    return table

Muon avatar Oct 02 '24 13:10 Muon

@eliotwrobson Do you have any thoughts on this? I can't say I'm too familiar with the specific algorithms, but adding support for this seems like a reasonable idea to me.

caleb531 avatar Oct 04 '24 17:10 caleb531

This seems like a reasonable thing to add! I think this just generalizes the definition of PDAs. There aren't too many algorithms implemented for those, so should be a straightforward change to add. I'm swamped with other projects now, but @Muon if you or someone else were to implement this change, I could definitely review.

eliotwrobson avatar Oct 15 '24 18:10 eliotwrobson