Source: https://w3.cs.jmu.edu/lam2mo/cs432_2018_08/files/decaf_ref.pdf