Source: https://www.cs.unc.edu/~otternes/comp455/6-pushdown-automata.pdf