Source: https://www.cs.unc.edu/~plaisted/comp455/slides/cfl3.5.pdf