Stack operations are now being handled mostly correctly by eliminate-unit-rules: when it eliminates an epsilon transition t from state q1 to state q2, by pulling non-empty transitions from q2 into q1, it correctly concatenates the stack operations on t with those on the new transitions.
But when no non-empty transition is reached, the stack operations are still being dropped. In sample grammar 14 of the wisps test set, for example, the state F_1 is final, if various stack operations are performed, but they have been dropped.
It should not be too difficult to make eliminate-unit-rules behave properly.
Stack operations are now being handled mostly correctly by eliminate-unit-rules: when it eliminates an epsilon transition t from state q1 to state q2, by pulling non-empty transitions from q2 into q1, it correctly concatenates the stack operations on t with those on the new transitions.
But when no non-empty transition is reached, the stack operations are still being dropped. In sample grammar 14 of the wisps test set, for example, the state F_1 is final, if various stack operations are performed, but they have been dropped.
It should not be too difficult to make eliminate-unit-rules behave properly.